开发者

PHP, search and delete files from directory - performance

开发者 https://www.devze.com 2022-12-15 21:57 出处:网络
I want to delete cache files in a directory, the directory can contain up to 50.000 files. I currently I use this function.

I want to delete cache files in a directory, the directory can contain up to 50.000 files. I currently I use this function.

// 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);        
        }

This works fine and it is fast, but is there any faster way to do this? (scan_dir seems to be slow). I can move the cache to memory obviously.

Thanks, hamlet


You may want to take a look into the glob function, as it may be even faster... it depends on the C library's glob command to do its work.

I haven't tested this, but I think this would work::

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

Edit: I'm not sure if $file would be just the filename or the entire path. glob's documentation implies just the filename.


Either glob as suggested before or, if you can be certain there won't be malicious input, by issueing directly to the system via exec(sprintf('rm %s/sess*', realpath($path)));, which should be fastest.

0

精彩评论

暂无评论...
验证码 换一张
取 消