程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> PHP編程 >> PHP綜合 >> 配置php.ini實現PHP文件上傳功能

配置php.ini實現PHP文件上傳功能

編輯:PHP綜合

昨天分享了在PHP網站開發中如何在php.ini中配置實現session功能的PHP教程,今天繼續分享在利用PHP實現文件上傳功能時幾點關鍵php.ini的配置。

  說到在php.ini中的文件上傳的配置,其實在之前介紹PHP文件上傳功能代碼實例教程以及Jquery AjaxUpload實現文件上傳功能代碼實例教程時我都有所提及。PHP文件上傳功能配置主要涉及php.ini配置文件中的upload_tmp_dir、upload_max_filesize、post_max_size等選項。

  php.ini中文件上傳功能配置選項說明

  打開php.ini配置文件找到File Uploads

  file_uploads = On

  默認允許HTTP文件上傳,此選項不能設置為OFF。

  upload_tmp_dir =

  默認為空,此選項在手動配置PHP運行環境時,也容易遺忘,如果不配置這個選項,文件上傳功能就無法實現,這個選項設置的是文件上傳時存放文件的臨時目錄,你必須給這個選項賦值,比如upload_tmp_dir ='/leapsoulcn',代表在C盤目錄下有一個leapsoulcn目錄,和session配置一樣,如果你是在linux環境下,你必須賦予這個目錄可寫權限。

  如何上傳超過8M的大文件?

  上傳大文件主要涉及配置upload_max_filesize和post_max_size兩個選項。

  php.ini配置文件中的默認文件上傳大小為2M,php初學者容易犯的一個錯誤是在編寫文件上傳功能時通過設置上傳文件最大大小的表單區域,即允許上傳文件的最大值,max_file_size(隱藏值域)的值來規定上傳文件的大小,其實一般別人可以繞過這個值,所以安全起見,最好是在php.ini配置文件中配置upload_max_filesize選項,設定文件上傳的大小。

  默認upload_max_filesize = 2M,即文件上傳的大小為2M,如果你想上傳超過8M的文件,比如20M,你必須設定upload_max_filesize = 20M。

  但是光設置upload_max_filesize = 20M還是無法實現大文件的上傳功能,你必須修改php.ini配置文件中的post_max_size選項,其代表允許POST的數據最大字節長度,默認為8M。如果POST數據超出限制,那麼$_POST和$_FILES將會為空。要上傳大文件,你必須設定該選項值大於upload_max_filesize指令的值,我一般設定upload_max_filesize和post_max_size值相等。另外如果啟用了內存限制,那麼該值應當小於memory_limit選項的值。

  文件上傳的其他注意事項

  在上傳大文件時,你會有上傳速度慢的感覺,當超過一定的時間,會報腳本執行超過30秒的錯誤,這是因為在php.ini配置文件中max_execution_time配置選項在作怪,其表示每個腳本最大允許執行時間(秒),0 表示沒有限制。你可以適當調整max_execution_time的值,不推薦設定為0。

  至此,在php.ini配置文件中對文件上傳選項進行配置的PHP教程就介紹完畢了,通過上面的步驟實踐與學習,再結合PHP程序,文件上傳功能就可以實現了。

下面是一些補充:


本文介紹了如何配置php.ini實現PHP文件上傳功能。其中涉及到php.ini配置文件中的upload_tmp_dir、upload_max_filesize、post_max_size等選項,這些選項是文件上傳成敗的關鍵。我們以php.5.3.5的Windows版本為例說明。

php.ini中文件上傳功能配置選項說明
用文本工具(推薦EditPlus)打開php.ini 配置文件,查找 File Uploads ,在這個區域有以下3個選項:

file_uploads = On

是否允許HTTP文件上傳。默認值為On允許HTTP文件上傳,此選項不能設置為Off。

upload_tmp_dir =

文件上傳的臨時存放目錄。如果沒指定則PHP會使用系統默認的臨時目錄。該選項默認為空,此選項在手動配置PHP運行環境時,也容易遺忘,如果不配置這個選項,文件上傳功能就無法實現,你必須給這個選項賦值,比如upload_tmp_dir = "d:/fileuploadtmp" ,代表在D盤目錄下有一個fileuploadtmp目錄,並且給這目錄讀寫權限。

upload_max_filesize = 2M

上傳文件的最大尺寸。這個選項默認值為2M,即文件上傳的大小為2M,如果你想上傳一個50M的文件,你必須設定 upload_max_filesize = 50M。
但是僅設置upload_max_filesize = 50M 還是無法實現大文件的上傳功能,我們還必須修改php.ini文件中的 post_max_size 選項。

繼續在 php.ini 中查找 Data Handling ,在這個區域有1個選項:

post_max_size = 8M

指通過表單POST給PHP的所能接收的最大值,包括表單裡的所有值。默認為8M。如果POST數據超出限制,那麼$_POST和$_FILES將會為空。
要上傳大文件,你必須設定該選項值大於upload_max_filesize選項的值,例如你設置了upload_max_filesize = 50M ,這裡可以把post_max_size = 100M。
另外如果啟用了內存限制,那麼該值應當小於memory_limit 選項的值。

繼續在 php.ini 中查找 Resource Limits ,在這個區域有3個選項:

max_execution_time = 30

每個PHP頁面運行的最大時間值(單位秒),默認30秒。當我們上傳一個較大的文件,例如50M的文件,很可能要幾分鐘才能上傳完,但php默認頁面最久執行時間為30秒,超過30秒,該腳本就停止執行,這就導致出現無法打開網頁的情況。因此我們可以把值設置的較大些,如 max_execution_time = 600。 如果設置為0,則表示無時間限制。

max_input_time = 60

每個PHP腳本解析請求數據所用的時間(單位秒),默認60秒。當我們上傳大文件時,可以將這個值設置的較大些。 如果設置為0,則表示無時間限制。

memory_limit = 128M

這個選項用來設置單個PHP腳本所能申請到的最大內存空間。這有助於防止寫得不好的腳本消耗光服務器上的可用內存。如果不需要任何內存上的限制將其設為 -1。
php5.2.0以前的版本默認8M; php.5.2.0版本默認為16M。php 5.2.0之後的版本默認為 128M;

php.ini 配置上傳文件功能示例
假設要上傳一個50M的大文件。配置 php.ini 如下:
file_uploads = On
upload_tmp_dir = "d:/fileuploadtmp"
upload_max_filesize = 50M
post_max_size = 100M
max_execution_time = 600
max_input_time = 600
memory_limit = 128M

提示:需要保持 memory_limit > post_max_size > upload_max_filesize

此例僅供參考,你可以根據實際情況調整。
 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved