如何使函数通过多个目录查找文件?

时间:2009-12-26 23:51:19

标签: php

PHP中是否存在通过多个目录搜索文件的“高效”方式?

假设我知道该文件可能位于其中一个搜索路径中:

$ pathOne,$ pathTwo,$ pathThree。但现在让我们想象一下,用户(使用框架的开发人员)也可以将他的东西分组到子文件夹中。 $ pathTwo包含20个子文件夹,每个子文件夹包含2个子文件夹。

我如何搜索所有这些路径以及$文件的子文件夹?我已经看到一些使用file_exists()函数的框架做了类似的事情(但没有搜索子文件夹)。可能我需要一种方法来找出哪些文件夹,然后进入它们?

1 个答案:

答案 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;
    }
}

自己省去了很多必须弄清楚所有文件和目录的工作。