php 上传参数
php上傳文件限制涉及很多方面,大致歸納一下,有如下幾個:
1、memory_limit ? ? ? ? ? ? ? ? ? ?//內存設置限制
2、max_execution_time ? ? ? ? //程序執行時間限制
3、post_max_size ? ? ? ? ? ? ? ?//最大POST數據限制
4、upload_max_filesize ? ? ? ? //最大上傳文件大小限制
當然有這幾個也不是絕對就限定了上傳文件大小,理論上也只是限制最大可能的上傳文件大小,因為內存設置還受限于當前可用內存數,程序執行時間受限于當前系統繁忙狀態,POST數據大小還受限于POST冗余頭或多斷上傳數,等等,這些因素都會在某個時機會影響到上傳文件結果。
所以從邏輯順序上:memory_limit?>?post_max_size?>?upload_max_filesize,再加上一個前提max_execution_time許可時間足夠長。
歸納一下,假設上傳限制100M字節,則參考設置如下:
; Maximum execution time of each script, in seconds max_execution_time = 30; Maximum amount of time each script may spend parsing request data max_input_time = 60; Maximum input variable nesting level ;max_input_nesting_level = 64; Maximum amount of memory a script may consume (128MB) memory_limit = 128M;Maximum size of POST data that PHP will accept. post_max_size = 105M; Maximum allowed size for uploaded files. upload_max_filesize = 100M一般來講,上傳文件時,首先需要保證上傳內存,查看PHP.INI默認配置,memory_limit默認是128M,對一次腳本執行可消耗的內存量。如果上傳限制100M,那么這么大的內存量而言足夠了(還是一般來講,比如多文件同時上傳可能就會不夠)。
?
調整set_time_limit
max_execution_time默認設置為30秒,對于上傳100M文件而言,目前的網絡情況來看,30秒要上傳100M文件幾乎是不可能的,10M帶寬完全對稱速率,一秒一兆也需要一分半鐘。所以這個設置即使調整也難以估算實際執行時間,而且調整太長對APACHE不太友善。
所以建議不要調整max_execution_time,而只是在PHP程序中使用:
set_time_limit(0);
進行臨時調整。設置0表示沒有時間限制。當然從程序執行角度,設置0是解決了超時問題,但其實并非好的解決辦法,如果程序支持斷點續傳,那么設置600秒或3600秒也似乎是個更好的思路,超時時自動斷點續傳即可。
?
?
?
?
查找 post_max_size = 2M (默認為2M)改為想要的大小,如:post_max_size = 100M
upload_max_filesize 表示所上傳的文件的最大值。
查找upload_max_filesize,默認為8M改為upload_max_filesize = 100M
需要注意的是,把post_max_size 大于 upload_max_filesize 的設置為好。
最后,設置結束后,需要重新啟動apache。
具體可查看 PHP手冊 中的 〔php.ini 核心配置選項說明〕
upload_max_filesize ? ? ? ? ? ? ? ? ?所上傳的文件的最大大小。
post_max_size ? ? ? ? ? ? ? ? ? ? ? ?設定 POST 數據所允許的最大大小。
memory_limit ? ? ? ? ? ? ? ? ? ? ? ? ?設定了一個腳本所能夠申請到的最大內存字節數。
PHP上傳文件涉及到的參數PHP默認的上傳限定是最大2M,想上傳超過此設定的文件,需要調整PHP、apache等的一些參數. 下面,我們簡要介紹一下PHP文件上傳涉及到的一些參數:
file_uploads
是否允許通過HTTP上傳文件的開關,默認為ON即是開
upload_tmp_dir
upload_tmp_dir用來說明PHP上傳的文件放置的臨時目錄,要想上傳文件,得保證服務器沒有關閉臨時文件和有對文件夾的寫權限,如果未指定則PHP使用系統默認值
upload_max_filesize
允許上傳文件大小的最大值,默認為2M
post_max_size
控制在采用POST方法進行一次表單提交中PHP所能夠接收的最大數據量。如果希望使用PHP文件上傳功能,則需要將此值改為比upload_max_filesize要大
max_input_time
以秒為單位對通過POST、GET以及PUT方式接收數據時間進行限制。如果應用程序所運行環境處在低速鏈路上,則需要增加此值以適應接收數據所需的更多時間
memory_limit
為了避免正在運行的腳本大量使用系統可用內存,PHP允許定義內存使用限額。通過memory_limit變量來指定單個腳本程序可以使用的最大內存容量變量memory_limit的值應當適當大于post_max_size的值
max_execution_time
max_execution_time設置了在強制終止腳本前PHP等待腳本執行完畢的時間,此時間以秒計算。當腳本進入了一個無限循環狀態時此變量非常有用。然而,當存在一個需要很長時間完成的合法活動時(例如上傳大型文件),這項功能也會導致操作失敗。在這樣的情況下必須考慮將此變量值增加,以避免 PHP在腳本正在執行某些重要過程的時候將腳本關閉
打開php.ini,首先找到
file_uploads = on ;是否允許通過HTTP上傳文件的開關。默認為ON即是開
upload_tmp_dir ;文件上傳至服務器上存儲臨時文件的地方,如果沒指定就會用系統默認的臨時文件夾
upload_max_filesize = 8m ;望文生意,即允許上傳文件大小的最大值。默認為2M
post_max_size = 8m ;指通過表單POST給PHP的所能接收的最大值,包括表單里的所有值。默認為8M
一般地,設置好上述四個參數后,上傳<=8M的文件是不成問題,在網絡正常的情況下。
但如果要上傳>8M的大體積文件,只設置上述四項還一定能行的通。
進一步配置以下的參數
max_execution_time = 600 ;每個PHP頁面運行的最大時間值(秒),默認30秒
max_input_time = 600 ;每個PHP頁面接收數據所需的最大時間,默認60秒
memory_limit = 8m ;每個PHP頁面所吃掉的最大內存,默認8M
把上述參數修改后,在網絡所允許的正常情況下,就可以上傳大體積文件了
max_execution_time = 600
max_input_time = 600
memory_limit = 32m
file_uploads = on
upload_tmp_dir = /tmp
upload_max_filesize = 32m
post_max_size = 32m
?
?
?
轉載于:https://www.cnblogs.com/shuaixf/archive/2012/05/25/2517899.html
總結
- 上一篇: 让代码看起来更舒服, 修改VS颜色样式
- 下一篇: ListBox combobox的常用