在用PHP進行檔案上傳的操作中,需要知道怎麼控制上傳檔案大小的設定,而檔案可傳大小是受到多種因素制約的,現總結如下:
1、php.ini:upload_max_filesize
所上傳的檔案的最大大小。預設值2M。
2、php.ini:memory_limit
本 指令設定 了一個指令碼所能夠申請到的最大記憶體位元組數,預設值8M。如果不需要任何記憶體上的限制,必須將其設為 -1。如果記憶體不夠,則可能出現錯誤:Fatal error: Allowed memory size of X bytes exhausted (tried to allocate Y bytes)
一般匯入資料庫時,如果資料庫太大,就會報錯,改這個就可以
3、php.ini:post_max_size
設定POST資料所允許的最大大小。此設定也影響到檔案上傳。要上傳大檔案,該值必須大於 upload_max_filesize。
4、php.ini:max_execution_time = 30 ;
Maximum execution time of each script, in seconds
5、php.ini:max_input_time = 60 ;
Maximum amount of time each script may spend parsing request data
6、如果用到mysql的BLOB進行二進位檔案儲存,則需要設定my.ini:max_allowed_packet=xxM
7、httpd.conf
在 Apache 裡面有一個選項是 LimitRequestBody, 這個選項可以限制使用者送出的 HTTP 要求內容。這個選項可以在 .htaccess 或 httpd.conf 裡使用,而如果在 httpd.conf 內使用,分別可以用在 virtualhost 或目錄屬性設定。
LimitRequestBody 的設定值是介乎 0 (無限制) 至 2147483647 (2GB)。
例如要在目錄 D:/AppServ/www 設定上傳限制為 100K,可以在 .htaccess 或 httpd.conf 加入以下語句:
LimitRequestBody 1024000000Options FollowSymLinks MultiViews ExecCGIAllowOverride AllOrder allow,denyAllow from all
Apache伺服器從用戶端接收長度不超過LimitRequestBody位元組數的請求,然後傳送給php模組,php模組再決定是否儲存成臨時檔案,設定$_FILES全域變數,移交給script進一步處理。
最後還要注意的是:
html本身能夠post資料也是有限制的,不能超過2G。
FTP用戶端有檔案位移指標的2GB邊界限制,未使用特殊編譯flag編譯的ftp伺服器端或者用戶端,無論在什麼FS中都不支援大於2GB的檔案。