[PHP] ディレクトリ内のファイル一覧を取得する

公開

スポンサーリンク

PHPで指定したディレクトリ内のファイル一覧を取得するには、readdir()scandir()を使います。

scandir()はPHP5で追加された関数ですので、PHP4では使えません。PHP4環境ではreaddir()を使うことになります。

コード例

ディレクトリ見本
このディレクトリ内のファイルまたはディレクトリ一覧を取得する例です。

readdir()
$path = "./foo/bar/";
$handle = opendir( $path );
$files = array();
while( $file_name = readdir( $handle ) ) {
  array_push( $files, $file_name );
}
closedir( $handle );
print_r($files);//Array ( [0] => . [1] => .. [2] => 001.txt [3] => 002.txt [4] => 003.txt [5] => folder )
scandir()
$path = "./foo/bar/";
$files = scandir( $path );
print_r($files);//Array ( [0] => . [1] => .. [2] => 001.txt [3] => 002.txt [4] => 003.txt [5] => folder )

取得結果には、自分自身のディレクトリ名“.”と、1階層上のディレクトリ名の“..”が含まれます。なので、指定したディレクトリにあるファイルとフォルダの合計を知りたい場合、count( $files )-2となります。また、ファイル一覧を表示する場合は、files[0]files[1]を除く必要があります。

readdir()に比べ、scandir()は簡潔なコードで同じ結果を得ることができます。ただし、こちらで紹介されている計測結果によると、readdir()の方がscandir()よりわずかに速いとのことです。

scandir()は第2引数で取得結果のソート順を指定することができます。デフォルトは昇順です。降順を指定する場合は引数に1を渡します。

$path = "./foo/bar/";
$files = scandir( $path, 1 );
print_r($files);//Array ( [0] => folder [1] => 003.txt [2] => 002.txt [3] => 001.txt [4] => .. [5] => . ) 

スポンサーリンク


Comment