掃描伺服器中的檔案時,經常需要將搜尋擴展到根資料夾之外以包含子資料夾和子子資料夾。以下是如何使用 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; }
遞歸搜尋的另一個選項是RecursiveDirectoryIteratoriveDirectoryIterator類。它提供了更強大和可擴展的方法:
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 透過其可擴充性選項提供了額外的靈活性。兩者之間的選擇取決於您的特定要求和所需的控制等級。
以上是如何使用 PHP 遞歸搜尋子資料夾中的檔案:Glob 與 RecursiveDirectoryIterator?的詳細內容。更多資訊請關注PHP中文網其他相關文章!