【PHP】指定したパス以下にあるディレクトリ一覧を取得する方法
「【PHP】現在実行中のスクリプトまでのパスを取得する方法」のポストでパスを取得できたので、取得したパスに存在するディレクトリの一覧を取得するPHPスクリプトを解説・ポストします。
PHPで同じ階層のディレクトリ一覧を取得する
パスの取得・指定
これは「【PHP】現在実行中のスクリプトまでのパスを取得する方法」で示した方法を利用します。
具体的には以下のようにします。
1 2 3 4 5 |
// ディレクトリへのパスを取得 $path = dirname( __FILE__); // 結果例: /var/www/toogie-develop/toogie/www/blog_sample/php/path |
※結果の最後にスラッシュはつきません
ディレクトリ一覧の取得
ディレクトリの取得には簡単便利な関数「scandir();」がPHPには用意されているので、それを使います。
1 2 3 4 5 6 7 8 9 10 11 12 13 |
// ディレクトリ(のみ)を取得 $dirs = scandir($path); // 結果例 Array ( [0] => . [1] => .. [2] => dir1 [3] => dir2 [4] => dir3 [5] => dir4 ) |
【PHP】scandir 関数
PHPマニュアルから使い方を参照。
scandir()関数は、指定されたパスのファイルとディレクトリの配列を返します。
この関数は、成功すれば配列を、失敗すれば FALSE と警告を返します。
directory がディレクトリではない場合は、 FALSE を返し、E_WARNING レベルのエラーを 発行します。
構文
array scandir ( string $directory [, int $sorting_order = SCANDIR_SORT_ASCENDING [, resource $context ]] )
パラメータ
- directory
- 調べるディレクトリ。
- sorting_order
- デフォルトでは、ソート順はアルファベット昇順です。 オプションの sorting_order に SCANDIR_SORT_DESCENDING を設定した場合、 ソート順はアルファベット降順になります。 SCANDIR_SORT_NONE を設定すると、 結果をソートせずに返します。
- context
- context パラメータの説明についてはマニュアルのストリームを参照ください。
同階層のディレクトリへの目次的な自動リンクスクリプト
「PHPで現在のパスを取得する方法」及びこのポストは『自動リンクスクリプト』を作りたくて調べた結果だったりします。
こうすれば一覧とリンクが楽に作成できますよ、という一連として晒してみたいと思います。
PHPスクリプト
ほぼ先ほど挙げたスクリプト + リンク処理だけで事足りるのですが、リンクさせたくないディレクトリがある場合にはそのディレクトリを無視するという処理を入れてみました。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
<?php // 現在の相対パスを取得 $path = dirname(__FILE__) .'/'; // ディレクトリ一覧の取得 $dirs = scandir($path); // 表示させないディレクトリ配列 $excludes = array( '.', '..', 'css', 'test', 'test2', ); // リンク表示 echo '<ul>',"\n"; foreach ($dirs AS $dir) { // 特定のディレクトリの場合は表示させない if (in_array($dir, $excludes)) { continue; } if ((is_dir($dir) === true)) { echo '<li>'; echo '<a href="./' . $dir . '">'; echo h($dir); echo '</a></li>'."\n"; } } echo '</ul>',"\n"; |
デモ
このブログのサンプルを収めているディレクトリです。