サーバーでファイルをスキャンする場合、多くの場合、ルート フォルダーを超えてサブフォルダーを含めて検索を拡張する必要が生じます。サブサブフォルダー。ここでは、PHP の glob 関数と RecursiveDirectoryIterator を使用してこれを実現する方法を示します。
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; }
再帰検索のもう 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 サイトの他の関連記事を参照してください。