2011-01-14 78 views
5

我有一個PHP腳本,用於打開本地目錄以複製和處理一些文件。但是這些文件可能不完整,因爲它們正在被慢速FTP進程上傳,我不想複製或處理尚未完全上傳的任何文件。用php檢測文件是否正在上傳或打開

在PHP中查找文件是否仍然被複制(即讀取)或寫入?

我需要我的腳本來處理那些已經完全上傳的文件。

的FTP進程現在,上傳文件並行,並把它1秒鐘以上,每個文件大小發生變化,所以這招是不是現在的工作對我來說,任何其他方法表明

回答

4

你有腳本控制通過FTP過程?如果是這樣,那麼在主上傳完成後,正在上傳的腳本上傳[FILENAME] .complete文件(空白文本文件),以便處理腳本知道文件已完成(如果還有匹配的* .complete文件)。

+0

這是問題,我沒有控制上傳腳本,我只有一個文件夾,我可以隨時找到我的文件進行處理,所以我必須檢測文件是否是否完成 – albanx 2011-01-14 16:22:35

3

+1到@MidnightLightning他的優秀建議。如果您對這個過程沒有控制權,您有幾個選項:

如果您知道文件的最終大小應該是什麼,然後使用filesize()來比較當前大小與已知大小。繼續檢查,直到他們匹配。

如果你不知道最終的尺寸應該是多少,它會變得有點棘手。您可以使用filesize()來檢查文件的大小,等待一兩秒鐘並再次檢查。如果大小沒有改變,則上傳應該完成。第二種方法的問題是,如果您的文件上傳失敗,可能會給您帶來誤判。所以等待的時間是關鍵。

+0

+1;如果你沒有控制文件,我也會建議這個。 – MidnightLightning 2011-01-14 16:24:55

+0

我也嘗試了這些解決方案,它們有時會工作,但現在的ftp進程並行上傳文件,並且文件大小需要1秒以上才能更改,所以此技巧現在對我來說不起作用,任何其他方法建議? – albanx 2011-01-14 16:25:44

2

你不指定你在使用什麼樣的操作系統,但如果它是一個Unix類型的盒子,你應該有fuser和/或lsof可用。 fuser將報告誰在使用特定文件,並且lsof會列出所有打開的文件(包括套接字,fifos,.so等等)。這些中的任何一個都很可能用於監視您的目錄。

在Windows端,Sysinternals有一些免費工具可以做同樣的事情。 handle可能會訣竅