ディレクトリを探索してリンク一覧表示

はてなブックマークに追加はてなブックマーク Yahoo!ブックマークに登録 ニフティクリップに追加 Livedoor クリップに追加 BuzzurlにブックマークBuzzurlにブックマーク Twitterに投稿  

Movable TypeなどCMS、ブログシステムを使っていると、記事の更新に集中できますね。
でも、中にはCMSを使っていない場合、手動でやんなきゃいけない作業が結構めんどうくさかったりします。
たとえば、コンテンツのリンク一覧からメニュー表示部分を作るような場合。

今日、あるディレクトリのリンク一覧を作ろうとして、面倒くさかったので、ディレクトリからファイルを拾ってリンク一覧メニューを作るようにしてみました。
マピー・ラボに、公開していた勉強中のAPIプログラム。
このディレクトリ構造は、”http://www.mapee.jp/labo/●●/index.php”、となっていてlaboディレクトリの中に、さらにディレクトリが入っている構造です。

PHPで、laboディレクトリ直下の「●●/index.php」を探索して、「index.php」が存在するディレクトリのみリンクを表示するスクリプトです。
探索したファイルからは、「<title>hogehoge</title>」のhogehoge部分も抜き取って、リンク表示用の文字にする。

<?php
$dir = dir('.');
while (($entry = $dir->read()) !== FALSE) {
    if ($entry == "." || $entry == "..") { continue; }
    // index.phpファイルを取得
    $file = @file_get_contents($entry . "/index.php");
    if (!$file) { continue; }
    // titleを取得
    $match = preg_match('/<title>(.*?)<\/title>/i', $file, $matches);
    // リンク表示
    echo '<div class="style6"><a href="' .  htmlentities($entry, ENT_QUOTES, "UTF-8") . '/">' . htmlentities($matches[1], ENT_QUOTES, "UTF-8") . "</a></div>";
}
?>

短いソースですが、ディレクトリ(●●/index.php)をいくつ作っても、メニューを自動表示してくれるので、これで楽になりました。

if ($entry == "." || $entry == "..") { continue; }

で、自分自身のディレクトリと親ディレクトリは飛ばす。
file_get_contents に、@で制御するのは、あんま良くない使い方だと、どっかで読んだような気がする・・・が、使っちゃいます。
リンク表示部分は、念のためにhtmlentitiesでエスケープ。

ディレクトリやファイルが入り混じってたり、ディープな階層まで探索したい場合でも、応用利かせれば、なんとかなると思います。
再帰とか使う場合は、無限ループに注意ですね。


日時: 2008年10月02日 21:45
コメントを投稿






トラックバック

■この記事のトラックバックURL:
http://www.mapee.jp/mpe334/mt-tb.cgi/441

この記事にトラックバックされる方は、参照先が分かるようにするために、「ディレクトリを探索してリンク一覧表示」へのリンクをお願いいたします。
以下のHTMLタグをトラックバック送信元ページ内に挿入して下さい。



※この記事へのリンクがない、また関連のないページからのトラックバックは反映されませんので、ご了承下さい。






あわせて読みたいブログパーツ
フィードメーター - ウェブライフハック