ホームページ > バックエンド開発 > PHPチュートリアル > PHP でサブフォルダー内のファイルを再帰的に検索する方法: Glob と RecursiveDirectoryIterator?

PHP でサブフォルダー内のファイルを再帰的に検索する方法: Glob と RecursiveDirectoryIterator?

Linda Hamilton
リリース: 2024-11-08 21:44:02
オリジナル
929 人が閲覧しました

How to Recursively Search for Files in Subfolders with PHP: Glob vs. RecursiveDirectoryIterator?

PHP Glob: サブフォルダー内のファイルの再帰的検索

サーバーでファイルをスキャンする場合、多くの場合、ルート フォルダーを超えてサブフォルダーを含めて検索を拡張する必要が生じます。サブサブフォルダー。ここでは、PHP の glob 関数と RecursiveDirectoryIterator を使用してこれを実現する方法を示します。

Glob with Recursion

Glob は、glob() 関数を使用した限定形式の再帰検索を提供します。ただし、GLOB_BRACE などの特定のオプションはサポートされていません。これを解決するには、ディレクトリ構造を再帰的に走査し、一致するファイルのマージされた配列を返すカスタム関数 rglob() を使用できます。

function rglob($pattern, $flags = 0) {
    $files = glob($pattern, $flags); 
    foreach (glob(dirname($pattern).'/*', GLOB_ONLYDIR|GLOB_NOSORT) as $dir) {
        $files = array_merge(
            [],
            ...[$files, rglob($dir . "/" . basename($pattern), $flags)]
        );
    }
    return $files;
}
ログイン後にコピー

RecursiveDirectoryIterator

再帰検索のもう 1 つのオプションは次のとおりです。 RecursiveDirectoryIterator クラス。これは、より堅牢で拡張可能なアプローチを提供します。

function rsearch($folder, $regPattern) {
    $dir = new RecursiveDirectoryIterator($folder);
    $ite = new RecursiveIteratorIterator($dir);
    $files = new RegexIterator($ite, $regPattern, RegexIterator::GET_MATCH);
    $fileList = array();
    foreach($files as $file) {
        $fileList = array_merge($fileList, $file);
    }
    return $fileList;
}
ログイン後にコピー

比較と使用法

rglob() と rsearch() はどちらも再帰的なファイル検索を実行できます。 RecursiveDirectoryIterator は、拡張オプションを通じてさらなる柔軟性を提供します。この 2 つのどちらを選択するかは、特定の要件と必要な制御レベルによって異なります。

以上がPHP でサブフォルダー内のファイルを再帰的に検索する方法: Glob と RecursiveDirectoryIterator?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート