Quantcast
Channel: プログラミング
Viewing all articles
Browse latest Browse all 7930

PHPでファイル一覧を取得する方法 - 雑多なブログ

$
0
0

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);

Viewing all articles
Browse latest Browse all 7930

Trending Articles