PHPでファイル一覧を取得する方法

opendir()〜readdir()を使う方法とglob()を使う方法のサンプルと比較。

1. 概要

ファイル一覧を取得する方法にはopendir()〜readdir()を使う方法とglob()を使う方法があります。

1-1. opendir()〜readdir()

  • 書き方がちょっとめんどい
  • 実行速度が速い
  • ファイル名だけ取得される

1-2. glob()

  • 書き方がシンプル
  • 実行速度が遅い
  • ファイルがフルパスで取得される
  • ファイルパターンを指定できる

2. スクリプト

2-1. opendir()〜readdir()

指定したパスの下の*.txtのファイル一覧を取得する。

記述例

// /path*.txtのファイル一覧を取得する
if ($handle = opendir('/path')) {
    while (false !== ($file = readdir($handle))) {
        if ('txt' != pathinfo($file, PATHINFO_EXTENSION)) continue;
        echo "$file\n";
    }
    closedir($handle);
}

実行例

$ php -a
Interactive shell

php > if ($handle = opendir('/home/hoge')) {
php >     while (false !== ($file = readdir($handle))) {
php >         if ('txt' != pathinfo($file, PATHINFO_EXTENSION)) continue;
php >         echo "$file\n";
php >     }
php >     closedir($handle);
php > }
ファイル1.txt
ファイル2.txt
ファイル3.txt
ファイル4.txt

2-2. glob()

指定したパスの下の*.txtのファイル一覧を取得する。

記述例

// /path*.txtのファイル一覧を取得する
foreach (glob("/path/*.txt") as $file) {
    echo "$file\n";
}

実行例

$ php -a
Interactive shell

php > foreach (glob("/home/hoge/*.txt") as $file) {
php >     echo "$file\n";
php > }
/home/hoge/ファイル1.txt
/home/hoge/ファイル2.txt
/home/hoge/ファイル3.txt
/home/hoge/ファイル4.txt