PHP递归搜索文件而忽略给定目录

时间:2014-12-16 06:57:59

标签: php

我正在尝试创建一个能够有效地在文档根目录中搜索文件并返回其路径的函数。目前,我要感谢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');

?>

我正在努力忽略搜索中的某些目录,这是出于性能原因。我宁愿不扫描已知无效的目录。目前,我只能在从RecursiveIteratorIterator接收文件列表后忽略某些路径模式,因此速度很慢。你可能会推荐一种更聪明的方法吗?

1 个答案:

答案 0 :(得分:0)

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