PHP中是否存在通过多个目录搜索文件的“高效”方式?
假设我知道该文件可能位于其中一个搜索路径中:
$ pathOne,$ pathTwo,$ pathThree。但现在让我们想象一下,用户(使用框架的开发人员)也可以将他的东西分组到子文件夹中。 $ pathTwo包含20个子文件夹,每个子文件夹包含2个子文件夹。
我如何搜索所有这些路径以及$文件的子文件夹?我已经看到一些使用file_exists()函数的框架做了类似的事情(但没有搜索子文件夹)。可能我需要一种方法来找出哪些文件夹,然后进入它们?
答案 0 :(得分:4)
您可以使用SPL库中的RecursiveDirectoryIterator:
$dir_iterator = new RecursiveDirectoryIterator("/path");
$iterator = new RecursiveIteratorIterator($dir_iterator,
RecursiveIteratorIterator::SELF_FIRST);
foreach ($iterator as $file) {
echo $file, "\n";
}
上面的代码将打印出您指定的目录中的所有文件的列表,包括所有子目录。您可以稍微更改foreach()
循环以执行文件匹配逻辑以查找您要查找的文件,如下所示:
$dir_iterator = new RecursiveDirectoryIterator("/path");
$iterator = new RecursiveIteratorIterator($dir_iterator,
RecursiveIteratorIterator::SELF_FIRST);
foreach ($iterator as $splFile) {
if ($splFile->getBaseName() == $file) {
echo "Found it";
//do stuff
break;
}
}
自己省去了很多必须弄清楚所有文件和目录的工作。