PHP 递归搜索文件,同时忽略给定的目录


PHP Recursively search for a file while ignoring given directories

我正在尝试创建一个函数,该函数将有效地在文档根目录中搜索文件并返回其路径。目前,我有以下感谢RecursiveDirectoryIterator和RegexIterator。

<?php
function find_file($filename) {
    $pattern = preg_quote($filename);
    $dir = new RecursiveDirectoryIterator($_SERVER['DOCUMENT_ROOT']);
    $iterate = new RecursiveIteratorIterator($dir);
    $reg_iterate = new RegexIterator($iterate, "/.*$pattern.*/", RegexIterator::GET_MATCH);
    $ignore_pattern = '('/?)(_*?)(old|archive|backup|cache|node_modules)';
    foreach($reg_iterate as $matches){
        foreach($matches as $file){
            $file = rtrim($file, '.');
            if(!preg_match("/$ignore_pattern/i", $file)){
                return $file;
            }
        }
    }
}
echo find_file('styles.css');
?>

出于性能原因,我正在尝试忽略某些目录进行搜索。我宁愿不扫描已知无果的目录。目前,我只能在从递归迭代器迭代器收到文件列表后忽略某些路径模式,因此速度很慢。有没有更聪明的方法可以推荐?

你可以试试glob:http://php.net/manual/en/function.glob.php。易于使用且速度快。