我有一个压缩图像的cron脚本。它基本上遍历文件夹,然后压缩文件夹中的文件。我的问题是有些图像正在中途处理。我的理论是用户正在上传图像,在图像上传完文件之前,压缩器会尝试压缩文件。因此压缩半上传的图像,并导致显示半个图像。
答案 0 :(得分:3)
在文件完全上传之前,PHP不会触发您的操作,但cron
作业可能会在文件完全保存之前开始与文件进行交互
从$_FILES
保存某些内容时,请将其保存到前缀为.
的版本,以将其标记为不完整。确保您的cron
作业跳过任何此类文件。
然后,一旦保存操作完成,重命名不带.
前缀的文件,使其有资格进行处理。
答案 1 :(得分:1)
有两种方法可以处理方案
<强>标志强>
在修改/写入文件之前设置文件标志。 我们的应用程序处理大量文件,我们设置标志,然后在它们完成后处理它们我们删除标志,因为它在cron标志上运行是处理文件的最佳方式。
通常,您可以在每个文件的表格上添加一列。或者你可以有一个数组,你可以存储所有当前处理的文件。
<强> filemtime()强>
正如您所提到的,您可以检查文件mtime
当前时间是否超过10分钟,然后您压缩它们,但如果其他一些进程正在使用该文件同时打开。它再次导致问题。
所以最好带旗帜。如果其他进程从不经常修改文件。
答案 2 :(得分:1)