我在客戶端上傳的遠程機器上有一個目錄(通過不同的工具和協議,從WebDav到FTP)文件。我也有一個PHP腳本返回目錄結構。現在,問題是,如果客戶端上傳大文件,並且在上傳時間內發出請求,那麼PHP腳本即使沒有完全上傳,也會返回該文件。有沒有辦法檢查一個文件是否使用PHP完全上傳?有沒有辦法檢查文件是否使用PHP完全上傳?
回答
設置您的遠程服務器將上傳的文件移動到另一個目錄,並且只查詢目錄文件被移動到文件。
據我所知,是沒有辦法(至少橫機)說,如果一個文件仍然被上載,沒有做這樣的事情:
- 查詢該文件的長度
- 等待幾秒鐘
- 查詢該文件的長度
- 如果是一樣的,它可能完成
+1表示邏輯,但即使這是有道理的,檢查文件大小的最佳時間段是什麼。如果上傳器的連接問題可能會在文件上傳過程中導致嚴重延遲,這意味着該文件可能具有相同的大小5,6,10秒或更長時間。如果文件較大,上傳速度較慢,則不能很好地解決問題,因爲您無法等待幾個小時來查看是否完成。 **沒有辦法**可能是最好的答案。 – Wh1T3h4Ck5 2012-03-29 16:10:57
的確,這就是爲什麼我提供了一個可行的解決方案,而不是檢查文件大小。至少OP可以根據他想做的事情做出決定。 – 2012-03-29 16:12:13
我不會依賴文件大小檢查,因爲元數據可能被緩存在操作系統中,而臨時網絡失速會欺騙你的檢查。網絡連接可能會停頓很多秒,在某些情況下甚至會持續幾分鐘。 – 2012-03-29 23:41:39
我認爲,某些操作系統在下載文件時會包含一個「.part」文件,因此可能會檢查是否存在這樣的文件。否則,我同意Brian的回答。如果您在同一個系統上使用該腳本,那麼使用move_uploaded_file()的返回值(如果該腳本正在被PHP腳本上傳)足夠簡單,但它確實成爲從遠程目錄拉取的一個挑戰,該目錄可以添加到不同的協議。
大多數UNIX/Linux/BSD-like操作系統有一個叫做lsof
(lsof代表「列表打開文件」)的命令,它輸出系統中所有當前打開文件的列表。您可以運行該命令來查看是否有任何進程仍在使用該文件。如果沒有,您的上傳已完成。在這個例子中,AWK是用來過濾所以只有文件將顯示,與寫打開或讀/寫文件句柄:
if (shell_exec("lsof | awk '\$4 ~ /.*[uw]/' | grep " . $uploaded_file_name) == '') {
/* No file handles open for this file, so upload is finished. */
}
我不是很熟悉Windows服務器,但這個線程可以幫助你在Windows機器上做同樣的事情(如果這是你所擁有的):How can I determine whether a specific file is open in Windows?
對不起,忘了提及,我在Linux上,並且永遠是(不是可移植性的問題)。這聽起來很棒!謝謝!明天會嘗試。 – 2012-03-29 23:44:18
這個問題是,它計數任何訪問文件,上傳,下載等我想它可以被更新爲僅用於上傳,但它取決於如何訪問該文件(webdav,ftp,ssh等) – 2012-04-03 11:46:46
嗯,是。但是,您可以使用awk僅顯示使用寫入或讀取/寫入文件處理程序打開的文件。這樣,閱讀不會打擾你。編輯答案... – 2012-04-08 21:06:10
- 1. 有沒有辦法檢查文件是否在使用
- 2. 有沒有辦法檢查(文件)句柄是否有效?
- 3. 有沒有辦法檢查用戶是否使用JQuery登錄?
- 4. Swift - 有沒有辦法檢查是否使用可變參數?
- 5. 有沒有辦法檢查一個var是否使用setInterval()?
- 6. 有沒有辦法檢查一個cookie在PHP中是否安全
- 7. 有沒有辦法檢查我是否可以安全地使用Page.IsValid?
- 8. 文件沒有完全上傳
- 9. 有沒有辦法檢測Outlook郵件是否沒有附件?
- 10. 有沒有辦法檢查反應組件是否被卸載?
- 11. KML文件 - 有沒有辦法完全禁用描述氣泡?
- 12. 有沒有辦法檢測我是否在文本上懸停?
- 13. 亞馬遜S3檢查文件是否完全上傳
- 14. PHP安全性。檢查上傳的文件是有效的
- 15. Dart文件上傳:較大的文件沒有完全上傳
- 16. 有沒有辦法檢查使用JavaScript的文件編碼?
- 17. 有沒有辦法檢查一個文件是否是SQLite3數據庫?
- 18. 有沒有辦法檢查用戶目前是否空閒?
- 19. 有沒有辦法檢查IME預測是否啓用?
- 20. 有沒有辦法檢查RVO是否被應用?
- 21. 有沒有辦法檢查符號是否被引用?
- 22. 有沒有辦法檢查TLS是否啓用?
- 23. 有沒有辦法檢查是否有其他程序全屏運行
- 24. 有沒有辦法找出.js文件是否使用jquery sintax?
- 25. 檢查是否至少有一個文件被上傳PHP
- 26. PHP檢查是否有文件選擇上傳
- 27. PHP如何檢查文件是否完成上傳
- 28. 有沒有辦法告訴Bitmap是否已經在Android上完全處置?
- 29. 有沒有辦法來檢查bean是否在spring上下文中定義?
- 30. 檢查文件是否完全寫入
簡而言之,答案是否定的。漫長的回答是不好的。 – satoshi 2012-03-29 15:56:29