扫描服务器中的文件时,经常需要将搜索扩展到根文件夹之外以包括子文件夹和子子文件夹。以下是如何使用 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; }
递归搜索的另一个选项是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 通过其可扩展性选项提供了额外的灵活性。两者之间的选择取决于您的具体要求和所需的控制级别。
以上是如何使用 PHP 递归搜索子文件夹中的文件:Glob 与 RecursiveDirectoryIterator?的详细内容。更多信息请关注PHP中文网其他相关文章!