Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/266.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何使函数通过多个目录查找文件?_Php - Fatal编程技术网

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

Php 如何使函数通过多个目录查找文件?,php,Php,PHP中是否有一种“performant”方法可以通过多个目录搜索文件 假设我知道该文件可能位于以下搜索路径之一: $pathOne,$Path2,$Patth3。但现在让我们想象一下,用户(使用该框架的开发人员)也可以将其内容分组到子文件夹中$Path2包含20个子文件夹,每个子文件夹又包含2个子文件夹 如何在所有这些路径和子文件夹中搜索$file?我见过一些框架过度使用file_exists()函数来做类似的事情(但没有搜索子文件夹)。可能我需要一种方法来确定哪些文件夹在那里,然后进入它们?

PHP中是否有一种“performant”方法可以通过多个目录搜索文件

假设我知道该文件可能位于以下搜索路径之一:

$pathOne,$Path2,$Patth3。但现在让我们想象一下,用户(使用该框架的开发人员)也可以将其内容分组到子文件夹中$Path2包含20个子文件夹,每个子文件夹又包含2个子文件夹

如何在所有这些路径和子文件夹中搜索$file?我见过一些框架过度使用file_exists()函数来做类似的事情(但没有搜索子文件夹)。可能我需要一种方法来确定哪些文件夹在那里,然后进入它们?

您可以使用SPL库中的:

$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;
    }
}

节省了自己计算所有文件和目录的大量工作。

如果不需要目录,可以先省略SELF\u,也可以将文件名检查到FilterEditor中。请举例说明?我不能这样做。@openfrog-第二段代码是一个完整的工作示例,如果您只需更改第一行的“/path”就可以了。你有什么问题?