1、問題
最近在開發網盤系統的時候發現,上傳大文件時會提示IO Error #2038 的錯誤。系統採用了PHP和Flash控件來上傳文件,網上的資料表明出現此錯誤的可能原因包括:
-
上傳文件大小超過服務器最大上傳限制或最大POST限制
-
與服務器連接異常中斷
-
上傳的文件爲空
-
文件(夾)權限
2、解決方法
首先排除了3、4和5的原因,而在上傳小文件的時候是正常的,也可以排除1的原因。故此集中在第2項進行解決,可能的原因包括:
-
限制了上傳文件類型
-
max_input_time超時
-
upload_max_filesize上傳文件限制
在php.ini
中分別對max_execution_time
、max_input_time
、memory_limit
、post_max_size
、upload_max_filesize
等五個參數進行了設置(可參考php.ini修改php上傳文件大小限制),調大了參數值,發現在上傳小於設置的參數值大小的文件時,仍然存在報錯的情況。
由於使用的是Nginx服務器,此文描述的情況與本文的情況類似,於是在Nginx站點配置文件中加入了client_max_body_size
參數的設置:
client_max_body_size 1000m;
重啓Nginx服務器後,問題解決。
3、總結
在用瀏覽器上傳超大文件時,需要同時修改Nginx和PHP的參數設置,包括:
-
Nginx:
client_max_body_size
-
PHP:
max_execution_time
、max_input_time
、memory_limit
、post_max_size
、upload_max_filesize
感謝原作者分享:
http://loosky.net/2888.html