[ PHP ] ファイル名でパターンマッチング検索 ( glob / DirectoryIterator )

Pocket

ここでは、あるディレクトリ内のファイルの一覧から拡張子が一致するファイルリストを取得する2通りのサンプルコードを掲載しています。

スポンサーリンク

DirectoryIterator クラスを使用する方法

DirectoryIterator クラスを使用して拡張子が一致するファイルリストを取得しています。ファイルのパターンマッチング に glob: ストリームラッパー を使用していますので、PHP 5.3.0 以降の環境が必要です。

// DirectoryIterator クラスの glob:// 検索を使ってマッチするファイルリストを取得する
// DirectoryIterator クラスは SplFileInfo クラスを継承しているため個々のファイルについても
// SplFileInfo クラスと同等の処理が可能

$pattern   = "glob://D:/path/to/*.txt" // 絶対パス
//$pattern = "glob://path/to/*.txt"    // 相対パス

$it = new DirectoryIterator($pattern); 
foreach($it as $f) {
    // ファイルのみを抽出対象とする場合
    if($f->isFile()) {
        echo $f->getPathname() . " size " . $f->getSize() . "\n";
    }
}

glob 関数を使用する方法


// glob 関数はマッチしたファイルのパスを string 配列で返す
$pattern   = "D:/path/to/*.txt" // 絶対パス
//$pattern = "path/to/*.txt"    // 相対パス

foreach (glob($pattern) as $f) {
    // ファイルのみを抽出対象とする場合
    if(is_file($f)) {
        echo $f . " size " . filesize($f) . "\n";
    }
}

さらに詳細にパターンを設定したい場合は、大まかなパターンで取得したファイルリストに対して preg_match 関数などで、詳細なパターン抽出を行えばよいと思います。

preg_mach の使用例については、『 [ PHP ] 正規表現サンプル12選 ( preg_match / preg_match_all) 』 でも紹介しています。よろしければどうぞ。

参考
スポンサーリンク


Pocket

Leave a Comment

Your email address will not be published. Required fields are marked *