Php 删除目录中数以百万计的文件,而不一次列出所有文件
我们在过时的Magento安装中有一个Php 删除目录中数以百万计的文件,而不一次列出所有文件,php,file,Php,File,我们在过时的Magento安装中有一个sessions文件夹, 需要手动从旧文件中清除的 这是当前代码: private function _rrmdirContent($dir) { $items = array_diff(scandir($dir), array('..', '.')); foreach ($items as $item) { $path = $dir . DIRECTORY_SEPARATOR . $item; is_dir(
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个文件->4gb内存限制异常)
有没有办法一个接一个地删除这些文件(最好是通过一些日期创建检查)。。如果不一次全部加载它们?IMHO最好的使用方法也是可用的,但是它的文档记录非常差,所以我坚持使用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());
}
}
要清除目录路径
调用
clearDirectory(PATH);
如果要在末尾删除根目录,请使用第二个参数
clearDirectory(PATH, true);
小心使用,这实际上会删除文件
为什么不打开一个shell并
rm-rf
该目录?而不是使用scandir(),它将整个目录列表加载到一个PHP数组中(因此消耗内存),并在内存中单独处理每个条目,或者仍然在PHPexec('rm-rf')
中处理,如果您需要在删除之前执行一些检查,您可以使用DirectoryIterator
或RecursiveDirectoryIterator
。对于与日期相关的检查,请使用文件系统函数或每个文件的文件信息进行测试,这是我见过的最惊人的昵称/化身。尊敬的先生。。。姆莱科(rofl)