如何判断文件是否已完成PHP上传?

时间:2017-08-14 07:20:54

标签: php

我有一个压缩图像的cron脚本。它基本上遍历文件夹,然后压缩文件夹中的文件。我的问题是有些图像正在中途处理。我的理论是用户正在上传图像,在图像上传完文件之前,压缩器会尝试压缩文件。因此压缩半上传的图像,并导致显示半个图像。

  1. PHP中是否有办法确认文件已完成上传?一旦我知道文件已完全写入,我只能进行压缩吗?
  2. 或者,有没有办法检查另一个进程是否正在使用某个文件?
  3. 或者,它是否足够可靠,可以查看文件何时被写入磁盘"直到10分钟过去才开始处理?

3 个答案:

答案 0 :(得分:3)

在文件完全上传之前,PHP不会触发您的操作,但cron作业可能会在文件完全保存之前开始与文件进行交互

$_FILES保存某些内容时,请将其保存到前缀为.的版本,以将其标记为不完整。确保您的cron作业跳过任何此类文件。

然后,一旦保存操作完成,重命名不带.前缀的文件,使其有资格进行处理。

答案 1 :(得分:1)

有两种方法可以处理方案

<强>标志

在修改/写入文件之前设置文件标志。 我们的应用程序处理大量文件,我们设置标志,然后在它们完成后处理它们我们删除标志,因为它在cron标志上运行是处理文件的最佳方式。

通常,您可以在每个文件的表格上添加一列。或者你可以有一个数组,你可以存储所有当前处理的文件。

<强> filemtime()

正如您所提到的,您可以检查文件mtime当前时间是否超过10分钟,然后您压缩它们,但如果其他一些进程正在使用该文件同时打开。它再次导致问题。

所以最好带旗帜。如果其他进程从不经常修改文件。

答案 2 :(得分:1)

您可以使用flock确保文件未被使用,例如,请参阅here。或者,您可以查看图片是否损坏或损坏,请参阅here