我有一個PHP表單上傳文件,它工作正常,並顯示錯誤消息,如果出現了問題。這很好。在PHP中上傳真正大文件時沒有錯誤?
問題是,當我用一個非常大的文件進行測試時,它只是刷新頁面,就好像我根本沒有發送文件一樣,並且表單中的$ _POST變量都沒有發送到服務器。
我想向用戶顯示一個錯誤,讓他們知道該文件太大。但是,我不能這樣做。
有誰知道發生了什麼?
我有一個PHP表單上傳文件,它工作正常,並顯示錯誤消息,如果出現了問題。這很好。在PHP中上傳真正大文件時沒有錯誤?
問題是,當我用一個非常大的文件進行測試時,它只是刷新頁面,就好像我根本沒有發送文件一樣,並且表單中的$ _POST變量都沒有發送到服務器。
我想向用戶顯示一個錯誤,讓他們知道該文件太大。但是,我不能這樣做。
有誰知道發生了什麼?
檢查您的PHP ini文件,該文件管理PHP允許上傳文件的大小。這些變量是很重要的:
這些範圍之外的任何上傳會被忽略或出錯,取決於您的設置。
本節的文檔具有最好的總結:http://ca3.php.net/manual/en/features.file-upload.common-pitfalls.php
編輯:另外請注意,大小大多數瀏覽器將不會發送上傳超過2GB。此鏈接已過時,但給出了一個想法:http://www.motobit.com/help/scptutl/pa98.htm。任何人都有更好的信息來源?
也有可以由服務器施加的限制,如Apache:http://httpd.apache.org/docs/2.2/mod/core.html#limitrequestbody
要真正看到發生了什麼,你應該檢查你的網絡服務器日誌,檢查瀏覽器上傳限制(如果你是使用Firefox),並嘗試看看print_r($_FILES)
是否生成任何有用的錯誤號碼。如果一切都失敗,請嘗試使用螢火蟲的網絡流量監控器。關鍵是要確定請求是否要到達服務器,以及是否請求(包括頭文件)的外觀。一旦你在鏈中找到了那麼多,那麼你可以回頭看看PHP如何處理上傳。
我超出了檢查我的錯誤處理正在工作的目的限制。缺乏有用的錯誤是問題所在。瀏覽器刷新,沒有錯誤,沒有文件或郵政變量發送。 – 2009-03-05 15:52:21
我會實現一個簡單的腳本,通過定期的ajax調用來知道已經完成了多少上傳。然後你可以實現某種進度條。有在網上幾個例子:
http://martinjansen.com/2007/04/28/file-upload-progress-bars-with-php/
你的$ _ POST是最有可能空的,因爲上傳超過的post_max_size指令:
從PHP的directives page:
如果帖子數據的大小比post_max_size大 ,$ _POST 和$ _FILES superglobals是空。 這可以通過各種方式進行跟蹤,例如 通過將$ _GET變量傳遞給 處理數據的腳本,即
<form action="edit.php?processed=1">
和 ,然後檢查是否設置了$ _GET ['processed'] 。
無法知道上傳文件的大小,直到它完全上傳。所以如果你想確定文件大小,然後顯示大文件錯誤,首先你必須上傳文件,然後檢查文件大小。爲了有一個大文件上傳,你應該在你的php配置文件php.ini中設置2個設置。 打開它並搜索「upload_max_filesize」並將該值設置爲所需的最大值。那麼您必須設置POST參數的最大值,因爲上傳的文件是通過HTTP POST方法接收的。找到「post_max_size」並將其設置爲一個很大的值。
最大上傳文件大小(upload_max_filesize) 最大發布數據大小(post_max_size) 是您需要設置的指令。我已經用多種操作系統,瀏覽器等對它進行了測試,這是你需要擔心的唯一兩件事。
分開形成的選項,因爲前者用戶回答:
max upload filesize (upload_max_filesize)
max post data size (post_max_size)
memory limit (memory_limit)
也有一個,當文件非常大,或線路忙,有需要太多的時間來執行此操作,這將觸及腳本執行限制的上限。
max_execution_time
你在幾個不同的瀏覽器中試過嗎?我的猜測是,這是客戶端的東西。 – 2009-03-05 15:40:51
我檢查了Firefox 3,Chrome和IE7。 – 2009-03-05 15:54:49