我们在过时的 Magento 安装中有一个sessions
文件夹,
需要从旧文件中手动清除。
这是当前的代码:
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个文件 - > 4 GB内存限制异常),它会加载大量资源
有没有办法逐个删除文件(最好是创建一些日期检查),..而不是一次性加载它们?
答案 0 :(得分:2)
恕我直言,最好的方法是使用DirectoryIterator,RecursiveDirectoryIterator也可用,但文档记录很差,所以我坚持使用DirectoryIterator。
递归删除目录中的所有文件的功能可能如下所示
function clearDirectory($path, $rmDir = false)
{
$iterator = new DirectoryIterator($path);
foreach ($iterator as $item) {
if ($item->isDot()) {
continue; // skip dot dirs
}
if ($item->isDir()) {
clearDirectory($item->getPathname(), true);
} else {
unlink($item->getPathname());
}
}
if ($rmDir) {
rmdir($iterator->getPathname());
}
}
清除目录PATH
来电
clearDirectory(PATH);
如果要在最后删除根目录,请使用第二个参数
clearDirectory(PATH, true);
谨慎使用,这实际上会删除文件