tech.chakapoko.com
Home / PHP / ファイル操作

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

glob 関数を使う方法

glob 関数は引数にパターンを与えるとそれにマッチするファイルを配列として返します。

ワイルドカードを指定すればそのディレクトリにあるファイルの一覧を取得できます。

<?php
foreach (glob('*') as $file) {
    echo $file . "\n";
}

scandir 関数を使う方法

scandir 関数は引数にディレクトリを指定するとそのディレクトにあるファイルの一覧を配列として返します。

結果にはカレントディレクトリと親ディレクトリが含まれるので、不要であれば除去します。

次のコードはカレントディレクトリにあるファイルの一覧を表示するサンプルコードです。

<?php
foreach (scandir('.') as $f) {
    if ($f === '.' || $f === '..') {
        continue;
    }
    echo $f . "\n";
}

opendir 関数、readdir 関数を使う方法

opendir 関数、readdir 関数を使ってファイルの一覧を読むこともできます。

<?php
$d = opendir('.');

while (($file = readdir($d)) !== false) {
    if ($file === '.' || $file === '..') {
        continue;
    }
    echo $file . "\n";
}

closedir($d);

入れ子になったディレクトリのファイル一覧を出す

ディレクトリの中にさらにディレクトリがある場合は、再帰的にファイル一覧を取得する必要があります。

次のコードは入れ子になったディレクトリのファイルの一覧を表示する関数のサンプルです。

<?php
function list_files_recursively($path) {
    $d = opendir($path);
    $files = [];
    while (($file = readdir($d)) !== false) {
        if ($file === '.' || $file === '..') {
            continue;
        }
        $full_path = rtrim($path, '/') . '/' . $file;
        if (is_dir($full_path)) {
            $files += list_files_recursively($full_path);
        } else {
            $files[] = $full_path;
        }
    }
    closedir($d);
    return $files;
}