2013-03-04 50 views
0

我有一個PHP腳本從遠程設備接收圖像並將它們保存到數據庫。從Apache啓動的腳本首先收到一個標題,用於定義正在上傳的內容,然後是上傳的圖像內容,全部作爲單個多部分傳輸。成功添加圖像後,它會回覆該設備的確認信息。如何處理損壞的分段上傳?

現在的問題是連接不是很可靠。有時傳輸超時。如果設備沒有收到確認信息,設備會在一段時間後重新發送數據,這不會成爲問題。除了傳輸中途中斷之外,Apache像往常一樣啓動腳本,腳本將不完整的圖像集合保存到數據庫,創建時間戳作爲唯一鍵。然後遠程設備重新發送數據,然後腳本正確接收,但無法保存它,因爲唯一密鑰已被損壞的數據佔用。

是否有一些可靠的方法可以從PHP腳本中告訴它已經在不完整的多部分傳輸中啓動,或者如果傳輸沒有成功結束,阻止Apache啓動它?

(我們真的不能更改數據庫結構或從遠程設備接收的格式。)

+0

'除非傳輸中途中斷,Apache像往常一樣啓動腳本'這聽起來很奇怪。你有這些情況下的日誌數據嗎?你能否記錄'$ _FILES'數組一段時間,並檢查上傳不完整時'error'變量的設置? – 2013-03-04 09:19:47

回答

1

檢查設備的應用程序代碼發送超時。也許連接速度太慢,它會隨着時間限制而剎車。在這種情況下,儘管沒有匹配Content-Length標頭,apache服務器將運行帶有部分接收數據的php腳本。

+0

看起來是這樣 - 當傳輸花費太長時間時,客戶端會在超時時發送FIN。現在,如果我能讓Apache拒絕與Content-Length不匹配的數據,那將會很好。 – 2013-03-04 10:18:46