我想删除目录中的缓存文件,该目录最多可包含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似乎很慢)。我可以将缓存显然移动到内存中。
谢谢, 村庄
答案 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)));
直接向系统发出,这应该是最快的。