我们有一个sessions
文件夹在过时Magento安装, 需要从旧文件手动清理。在一个目录中删除数百万个文件而不一次全部列出它们
这是当前的代码:
private function _rrmdirContent($dir)
{
$items = array_diff(scandir($dir), array('..', '.'));
foreach ($items as $item) {
$path = $dir . DIRECTORY_SEPARATOR . $item;
is_dir($path) ? $this->_rrmdir($path) : unlink($path);
}
}
它加载大量的资源,如果文件列表是长(1000 000 000文件 - > 4GB内存的限制除外)
是否有办法逐个删除文件(理想情况下用一些日期创建的检查),..一次不加载全部文件?
为什么不打开一个shell和'rm -rf'那个目录? –
而不是使用scandir(),它将整个目录列表加载到一个PHP数组中(因此消耗内存),使用[opendir()](http://www.php.net/manual/en/function.opendir.php) ,[readdir()](http://www.php.net/manual/en/function.readdir.php)和[closedir()](http://www.php.net/manual/en/function。 closedir.php)在内存中单独处理每个条目 –
或仍然在php'exec('rm -rf')' – 2016-12-30 11:25:25