php上傳大文件失敗的解決辦法
php上傳大文件失敗的各種原因的總結以及各種解決辦法的,于是轉來與大家分享之。
下面分別是各種原因以及解決辦法
(1)文件上傳時存放文件的臨時目錄必須是開啟的并且是 PHP 進程所有者用戶可寫的目錄。如果未指定則 PHP 使用系統默認值。
php.ini文件中upload_tmp_dir用來說明PHP上傳的文件放置的臨時目錄,要想上傳文件,得保證服務器沒有關閉臨時文件并對該文件夾有寫入的權限。
(2)max_execution_time 的值必須足夠大。變量 max_execution_time 設置了在強制終止腳本前PHP等待腳本執行完畢的時間,此時間以秒計算。當腳本進入了一個無限循環狀態時此變量非常有用。然而,當存在一個需要很長時間完成的合法活動時(例如上傳大型文件),這項功能也會導致操作失敗。在這樣的情況下必須考慮將此變量值增大,以避免PHP在腳本正在執行某些重要過程的時候將腳本關閉,例如設置為 90 秒。
max_execution_time = 90
注意在php函數中還有個 set_time_limit 函數,和以上這個設置的作用是相同的,這兩者的區別就是 以上是在 php.ini 文件中設置的,而 set_time_limit 是寫在php文件中的。所以也可以通過在頁面中用 set_time_limit 設置程序的最長執行時間,比如無限制即:set_time_limit(0);
(3)file_uploads = On 默認值為on,意思是允許通過 HTTP 進行文件上傳,此選項不能設置為OFF。
(4)upload_max_filesize = 2M 設定文件上傳的大小的最大值,php.ini配置文件中的默認文件上傳大小為2M,php初學者容易犯的一個錯誤是在編寫文件上傳功能時通過設置上傳文件最大大小的表單區域,即允許上傳文件的最大值,max_file_size(隱藏值域)的值來規定上傳文件的大小,其實一般別人可以繞過這個值,所以安全起見,最好是在 php.ini 配置文件中配置 upload_max_filesize 選項,設定文件上傳的大小。默認 upload_max_filesize = 2M,即文件上傳的大小為2M,如果你想上傳超過8M的文件,比如20M,你必須設定upload_max_filesize = 20M。
(5)post_max_size 這個值也必須足夠大。這個變量也是一個同表單提交相關的變量,它限制的是客戶端通過POST方法進行一次表單提交時PHP程序所能夠接收的最大數據量。一般情況下,將此值的值設置的比 upload_max_filesize 略大即可,比如要上傳20MB的文件,此值可以設置為 21MB。
(6)max_input_time 此變量可以以秒為單位對通過POST、GET以及PUT方式接收數據時間進行限制。如果應用程序所運行環境處在網絡比較慢的情況下,則需要增加此值以增大接收數據所需要的時間,比如將此值設置為 90秒。
max_input_time = 90
(7)memory_limit 也必須足夠大,為了避免正在運行的腳本大量使用系統可用內存,PHP允許定義內存使用限額。通過memory_limit變量來指定單個腳本程序可以使用的最大內存容量。變量memory_limit的值應當適當大于post_max_size的值。
(8)另外如果你的主機是 nginx 操作系統的話,如果以上操作都不行的話,記得在 nginx 的配置文件里面加上 client_max_body_size 20m; 這樣一句,即表示最大允許上傳 20MB,具體根據自己的情況來。我的 nginx 配置文件的位置在 /usr/local/nginx/conf/nginx.conf。
關鍵字:php、上傳、系統
新文章:
- CentOS7下圖形配置網絡的方法
- CentOS 7如何添加刪除用戶
- 如何解決centos7雙系統后丟失windows啟動項
- CentOS單網卡如何批量添加不同IP段
- CentOS下iconv命令的介紹
- Centos7 SSH密鑰登陸及密碼密鑰雙重驗證詳解
- CentOS 7.1添加刪除用戶的方法
- CentOS查找/掃描局域網打印機IP講解
- CentOS7使用hostapd實現無AP模式的詳解
- su命令不能切換root的解決方法
- 解決VMware下CentOS7網絡重啟出錯
- 解決Centos7雙系統后丟失windows啟動項
- CentOS下如何避免文件覆蓋
- CentOS7和CentOS6系統有什么不同呢
- Centos 6.6默認iptable規則詳解