如果文件正在上传或已打开,请使用php检测

时间:2011-01-14 16:15:14

标签: php

我有一个PHP脚本,它打开一个本地目录,以便复制和处理一些文件。但是这些文件可能不完整,因为它们是通过缓慢的FTP进程上传的,我不想复制或处理任何尚未完全上传的文件。

是否可以在PHP中查找文件是否仍在被复制(即读取)或写入?

我需要我的脚本来处理那些已经完全上传的文件。

现在是ftp进程,并行上传文件,每个文件大小需要1秒以上才能更改,所以这个技巧现在对我不起作用,其他任何方法都建议

3 个答案:

答案 0 :(得分:4)

您是否拥有FTP进程的脚本控制权?如果是这样,让主页上传完成后,正在进行上传的脚本上传一个[FILENAME] .complete文件(空白文本文件),因此如果还有匹配的* .complete文件,则处理脚本知道该文件已完成。

答案 1 :(得分:3)

+1给@MidnightLightning他的出色建议。如果您无法控制该过程,则可以选择以下几种方法:

如果您知道文件的最终大小应该是什么,请使用filesize()将当前大小与已知大小进行比较。继续检查,直到匹配。

如果您不知道最终尺寸应该是多少,那就会变得有点棘手。您可以使用filesize()检查文件的大小,等待一两秒再重新检查。如果大小没有改变,则上传应该完成。第二种方法的问题是,如果您的文件上传因任何原因而失速,可能会给您带来误报。所以等待的时间是关键。

答案 2 :(得分:2)

您没有指定您所使用的操作系统类型,但如果它是Unix类型的框,则应该有fuser和/或lsof可用。 fuser将报告谁正在使用特定文件,lsof将列出所有打开的文件(包括套接字,fifos,.so等等)。这些中的任何一个都很可能用于监视您的目录。

在Windows端,有一些来自Sysinternals的免费工具可以做同样的事情。 handle可能会成功