2009-03-04 33 views
4

我有一個網站每天接收30-40k的照片上傳,而且我看到一個問題現在以更高的頻率彈出。這個問題是這樣的:PHP文件上傳被部分上傳「劫持」

我們的上傳腳本接收到(通過$ _FILES ['name'] ['tmp_name'])文件(照片),該文件沒有被用戶上傳&大部分時間文件收到一個「部分」上傳。

當然,起初我以爲這是我的PHP代碼犯了一個簡單的錯誤,我花了好幾天的時間仔細查看它,以確保在檢查代碼後,我發現通過HTTP POST上傳到PHP實際上是錯誤的文件。所以問題發生在它到達我的代碼之前。腳本收到的tmp文件(phpxxxx)有時是不正確的,就好像它被另一個進程覆蓋一樣,並且通常被部分上傳的文件覆蓋。

有沒有人見過這樣的問題?任何幫助是極大的讚賞。我談到這個作爲最後的手段搜索的天/要求其他PHP開發者

因此,要回顧:

  • 用戶上傳照片
  • PHP腳本接收不是由上傳的文件用戶(預代碼,通過$ _FILES在/ var/tmp目錄)
  • 通常收到的不正確的文件是部分上載或破上傳
  • 似乎所有的時間隨機不發生
+0

這是一個遠射 - 但也許這是一個編碼問題?我知道一些瀏覽器嘗試使用gzip壓縮進行上傳。這可能會使它看起來不像圖像文件。上傳的HTTP頭是什麼樣子的? – scraimer 2009-03-04 06:40:39

+0

我相信這是一個愚蠢的http://stackoverflow.com/questions/631871/php-temp-file-names-for-uploads-colliding – Iiridayn 2010-07-19 17:22:53

回答

1

首先,檢查你的PHP版本。

其次,檢查你的文件上傳限制和post_max_size設置選項

它可能只是有人試圖上傳一個文件,該文件過大:-)

+0

它的PHP 5.2.8與Apache 2.2.11和FreeBSD 7.0。 我已經確保所有php.ini變量設置正確。郵政最大尺寸和文件最大尺寸都設置得非常高。 如果手機上傳時間過長,我還會將max_input_time設置爲更高的值。 – mrmanman 2009-03-04 19:43:47

2

你可以嘗試不同的名字臨時文件以避免被覆蓋?你能找出新的,不正確和不完整的文件的來源嗎?

這是一個開發環境嗎?是否有多個用戶同時上傳文件?

用非常小的圖片試試你的程序來檢查SchizoDuckie是否正確處理文件大小問題。

嘗試使用不同的導航器來消除公認的遠程可能性,即它是一個本地問題。

檢查臨時文件存儲目錄的權限。

1

PHP的內置文件處理不支持部分上傳。

每次上傳後關閉KeepAlive和/或發送'Connection:close'標題。

配置您的網絡服務器發送頭'允許範圍:無'。