【发布时间】:2016-10-04 15:49:36
【问题描述】:
我在一个目录中有大约 600k 图像,我需要使用 PHP 删除其中几乎一半。在一个数组中,我存储了需要删除的文件的名称,当我尝试遍历数组并在 ~1k 次迭代后调用 unlink($filename) 服务器崩溃 时,我必须重新启动它(CentOS 7)。 PHP 内存使用量为 81MB,这是因为数组很大,我使用它是因为它与目录中的文件进行一些比较更快,并不重要。
foreach($filenames as $filename){
// Deletes file
unlink($filename);
}
我坚持,也许我应该试试exec(),但它很慢,而且过了一段时间它也会冻结。我也在这里看到了一个discussion unlink() 是异步的,但我认为不是。
我不需要rmdir() 和删除目录,因为所有 600k 文件都在一个目录中,并且应用程序中的文件和实体之间的关系存储在 DB 中。
是否有任何其他替代方法可以从 PHP 中删除文件,或者有一些建议如何使这个东西工作?
【问题讨论】:
-
你是从浏览器运行这个吗?还是从命令行?如果你正在运行一些需要很长时间才能执行的东西,那么最好不要从浏览器中运行它
-
当然来自 CLI
-
为什么必须在 PHP 中完成?
-
在这个命令中删除,例如一次100个文件,把这个命令放到cron中。
-
它不需要从 PHP 运行,但我更喜欢,如果有办法在 PHP 中执行,那为什么不呢,我也可以轻松地与 DB、ORM 通信。