我在一个目录中有大约600k图像,我需要用PHP删除几乎一半的图像。在一个数组中,我存储了需要删除的文件的名称,当我尝试循环遍历数组并在~1k迭代后调用unlink($filename)
服务器崩溃并且我必须重新启动它(CentOS 7) )。 PHP内存使用量为81MB,这是因为我使用的是大型阵列,因为它对目录中的文件进行一些比较更快,并不重要。
foreach($filenames as $filename){
// Deletes file
unlink($filename);
}
我想,也许我应该尝试exec()
,但它很慢,过了一段时间它也冻结了。我在这里也看到discussion是unlink()
是异步的,但我认为不是。
我不需要rmdir()
和删除目录,因为所有600k文件都在一个目录中,文件和应用程序中的实体之间的关系存储在DB中。
还有其他替代方法可以从PHP中删除文件,还是有一些建议如何让这个东西工作?
答案 0 :(得分:0)
我找到了一个解决方案。使用to_delete.txt
将所有文件的Firt写入file_put_contents()
文件(每行一个文件名)。然后运行xargs -a to_delete.txt -d'\n' rm
删除文件(xarg尽可能多地添加参数到rm,它不会为每个文件运行rm命令)。