2010-06-25 35 views
0

我相信這是有史以來最史詩的遊戲之一。所以,我已上傳表格,如here。我讓人們可以上傳他們的文件只有1 MB。但是,如果我嘗試上載例如1 GB文件,則需要很長時間纔會出現錯誤。所以,這裏有一個問題。在檢查文件的大小之前,該文件是否正在我的託管中下載,或者是否需要託管我的資源?爲什麼在它給我一個錯誤之前需要很長的時間和年齡,但如果我嘗試上傳2 MB文件,它會在1秒內給我一個錯誤? 謝謝你的解釋。即使文件不應該被下載,文件是否正在被下載到網站?

回答

0

如果您正在檢查的服務器上的文件大小,然後,是的,它必須上傳到服務器,以只是運行if語句來檢查的大小。

任何你在客戶端做檢查會,當然,是在客戶端的擺佈。所以沒有100%可靠的方法來做到這一點。 Artefacto指出了一種吸引大多數用戶的好方法。還有一個JavaScript ActiveX對象,這可能有助於(http://www.kavoir.com/2009/01/check-for-file-size-with-javascript-before-uploading.html),但同樣,用戶可以輕鬆將其禁用(即使是很無意的)或具有不支持它在所有的瀏覽器。

+0

所以你想說每個人都可以嘗試上傳10 GB的文件到像imageshack等網站,並傷害他們,竊取主機的資源? – 2010-06-25 18:11:45

+0

@hey它們會浪費帶寬,但希望不會佔用磁盤空間(如果服務器配置正確,不允許POST請求超過一些小數目)。 – Artefacto 2010-06-25 18:17:11

+0

@hey任何人都可以用他們想要的所有數據來轟炸他們想要的任何服務器,真的。服務器可以阻止任何進入它的東西,但帶寬已經被吃掉了。在這種情況下,所有可以完成的事情都是「建議」的,所以客戶(通過大多數人不知道如何規避的方式,取決於觀衆)不這樣做。 – David 2010-06-25 18:24:02

0

你應該包括像輸入:

<input type="hidden" name="MAX_FILE_SIZE" value="30000" /> 

該提示瀏覽器中就可以上傳的最大文件大小。大多數瀏覽器會警告用戶,如果該文件太錯誤。

我不認爲如果用戶提交一個PHP將存儲過去允許在php.ini中的最大尺寸後的文件(服務器不會有1GB的文件不必要地佔用空間);但是,用戶必須在獲取服務器的錯誤響應之前發送所有數據,因爲HTTP協議沒有提供中斷客戶端請求並提前發送響應的設置。

要注意的是,如果允許大量POST數據和延遲的文件大小檢查你的PHP腳本,更多的磁盤空間將被使用。

+0

這是很容易刪除這行,一個人的程序員,所以這是不是安全。 – 2010-06-25 18:09:20

+0

@hey這不是安全問題。服務器已經在拒絕這個文件(你在問題中說過)。這是關於給用戶一個線索。如果他想浪費帶寬發送一個文件將被拒絕...就這樣吧。 – Artefacto 2010-06-25 18:10:14