PHP,从目录中搜索和删除文件 - 性能

时间:2010-01-07 15:40:15

标签: php performance file search

我想删除目录中的缓存文件,该目录最多可包含50.000个文件。我目前使用这个功能。

// Deletes all files in $type directory that start with $start

    function clearCache($type,$start)
        {
        $open = opendir($GLOBALS['DOC_ROOT']."/cache/".$type."/");
        while( ($file = readdir($open)) !== false ) 
            {
            if ( strpos($file, $start)!==false ) 
                {
                unlink($GLOBALS['DOC_ROOT']."/cache/".$type."/".$file);
                }
            }
        closedir($open);        
        }

这很好用而且速度很快,但有没有更快的方法呢? (scan_dir似乎很慢)。我可以将缓存显然移动到内存中。

谢谢, 村庄

2 个答案:

答案 0 :(得分:4)

您可能需要查看glob函数,因为它可能更快......它取决于C库的glob命令来完成它的工作。

我没有对此进行过测试,但我认为这样可以正常运行::

foreach (glob($GLOBALS['DOC_ROOT']."/cache/".$type."/".$start) as $file) {
    unlink($GLOBALS['DOC_ROOT']."/cache/".$type."/".$file);
}

编辑:我不确定$ file是文件名还是整个路径。 glob的文档仅包含文件名。

答案 1 :(得分:0)

以前建议的glob或者,如果您可以肯定不会有恶意输入,可以通过exec(sprintf('rm %s/sess*', realpath($path)));直接向系统发出,这应该是最快的。