PHP, поиск и удаление файлов из каталога - производительность - PullRequest
4 голосов
/ 07 января 2010

Я хочу удалить файлы кэша в каталоге, каталог может содержать до 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 ]

4 голосов
/ 07 января 2010

Возможно, вы захотите взглянуть на функцию glob , поскольку она может быть еще быстрее ... она зависит от команды glob библиотеки C, которая выполняет свою работу.

Я не проверял это, но думаю, что это сработает ::

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

Edit: я не уверен, что $ file будет просто именем файла или полным путем. Документация glob подразумевает только имя файла.

0 голосов
/ 07 января 2010

Либо glob, как предлагалось ранее, либо, если вы можете быть уверены, что злонамеренного ввода не будет, выпуская напрямую в систему через exec(sprintf('rm %s/sess*', realpath($path)));, что должно быть быстрее.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...