PHPでファイル一覧は下記の方法で取得できます。 改めて調べてみると色々な方法がありますね。
- opendir, readdir
- scandir
- DirectoryIterator
- glob
opendir, readdir
opendir
でディレクトリハンドルを取得し、readdir
でディレクトリ内のディレクトリとファイルを取得します。取得するファイルの順番は、ファイルシステムに格納されている順序に依存します。
なお、.
、..
がリストに含まれるため、これらを除外する必要があります。
$dh = opendir('.'); if ($dh) { while (($file = readdir($dh)) !== false) { // `.` や `..` を除外します if (in_array($file, ['.', '..'])) continue; // ファイル以外は除外します if (!is_file($file)) continue; $files[] = $file; } closedir($dh); } print_r($files);
scandir
対象パスのファイルとディレクトリのリストを取得します。
リストに .
と ..
が含まれるため、これらを除外する必要があります。
$result = scandir('.'); print_r($result);
デフォルトでは、リストはアルファベット順に昇順で並べられます。 異なる並び順にしたい場合は、第二引数に以下のオプションを指定します。
SCANDIR_SORT_DESCENDING ... アルファベットの降順 SCANDIR_SORT_NONE ... ソートせずに出力する
glob
指定したパターンにマッチするファイルやディレクトリのパスを返します。 以下の例では、カレントディレクトリ内の.txtもしくは.pdfに該当するファイルを取得しています。
print_r(glob('*.{txt,pdf}', GLOB_BRACE));
一定のルールで命名されたファイルやフォルダのリストを取得する場合に便利な関数です。なお、マッチしたパスのリストを一度にまとめて取得するため、ファイルやフォルダの数が多い場合は、 DirectoryIterator
を使うと良いでしょう。
DirectoryIterator
対象パス内のファイルとフォルダのリストをイテレーターを使って取得します。一件ずつ展開するためメモリの消費が抑えられます。
$itr = new DirectoryIterator('.'); $files = []; foreach ($itr as $fileinfo) { if (!$fileinfo->isFile()) continue; $files[] = $fileinfo->getFilename(); } print_r($files);