PHP取消链接大量文件

时间:2016-06-04 18:31:45

标签: php centos unlink

我在一个目录中有大约600k图像,我需要用PHP删除几乎一半的图像。在一个数组中,我存储了需要删除的文件的名称,当我尝试循环遍历数组并在~1k迭代后调用unlink($filename) 服务器崩溃并且我必须重新启动它(CentOS 7) )。 PHP内存使用量为81MB,这是因为我使用的是大型阵列,因为它对目录中的文件进行一些比较更快,并不重要。

foreach($filenames as $filename){

  // Deletes file
  unlink($filename);
}

我想,也许我应该尝试exec(),但它很慢,过了一段时间它也冻结了。我在这里也看到discussionunlink()是异步的,但我认为不是。

我不需要rmdir()和删除目录,因为所有600k文件都在一个目录中,文件和应用程序中的实体之间的关系存储在DB中。

还有其他替代方法可以从PHP中删除文件,还是有一些建议如何让这个东西工作?

1 个答案:

答案 0 :(得分:0)

我找到了一个解决方案。使用to_delete.txt将所有文件的Firt写入file_put_contents()文件(每行一个文件名)。然后运行xargs -a to_delete.txt -d'\n' rm删除文件(xarg尽可能多地添加参数到rm,它不会为每个文件运行rm命令)。