eyecatch php

PHP

【PHP】指定したパス以下にあるディレクトリ一覧を取得する方法

「【PHP】現在実行中のスクリプトまでのパスを取得する方法」のポストでパスを取得できたので、取得したパスに存在するディレクトリの一覧を取得するPHPスクリプトを解説・ポストします。

PHPで同じ階層のディレクトリ一覧を取得する

パスの取得・指定

これは「【PHP】現在実行中のスクリプトまでのパスを取得する方法」で示した方法を利用します。
具体的には以下のようにします。

[php]
// ディレクトリへのパスを取得
$path = dirname( __FILE__);

// 結果例:
/var/www/toogie-develop/toogie/www/blog_sample/php/path
[/php]

※結果の最後にスラッシュはつきません

ディレクトリ一覧の取得

ディレクトリの取得には簡単便利な関数「scandir();」がPHPには用意されているので、それを使います。

[php]
// ディレクトリ(のみ)を取得
$dirs = scandir($path);

// 結果例
Array
(
[0] => .
[1] => ..
[2] => dir1
[3] => dir2
[4] => dir3
[5] => dir4
)
[/php]

【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スクリプト

ほぼ先ほど挙げたスクリプト + リンク処理だけで事足りるのですが、リンクさせたくないディレクトリがある場合にはそのディレクトリを無視するという処理を入れてみました。

[php]
',"\n";
foreach ($dirs AS $dir) {

// 特定のディレクトリの場合は表示させない
if (in_array($dir, $excludes)) {
continue;
}

if ((is_dir($dir) === true)) {
echo '

  • ';
    echo '';
    echo h($dir);
    echo '
  • '."\n";
    }
    }
    echo '

    ',"\n";
    [/php]

    デモ

    このブログのサンプルを収めているディレクトリです。

    関連ポスト

    【PHP】現在実行中のスクリプトまでのパスを取得する方法

    -PHP
    -, , ,