PHP實(shí)現(xiàn)文件上傳功能時(shí)幾點(diǎn)關(guān)鍵php.ini的配置。
說(shuō)到在php.ini中的文件上傳的配置,其實(shí)在之前介紹PHP文件上傳功能代碼實(shí)例教程以及Jquery AjaxUpload實(shí)現(xiàn)文件上傳功能代碼實(shí)例教程時(shí)我都有所提及。PHP文件上傳功能配置主要涉及php.ini配置文件中的upload_tmp_dir、upload_max_filesize、post_max_size等選項(xiàng)。
php.ini中文件上傳功能配置選項(xiàng)說(shuō)明
打開(kāi)php.ini配置文件找到File Uploads
file_uploads = On
默認(rèn)允許HTTP文件上傳,此選項(xiàng)不能設(shè)置為OFF。
upload_tmp_dir =
默認(rèn)為空,此選項(xiàng)在手動(dòng)配置PHP運(yùn)行環(huán)境時(shí),也容易遺忘,如果不配置這個(gè)選項(xiàng),文件上傳功能就無(wú)法實(shí)現(xiàn),這個(gè)選項(xiàng)設(shè)置的是文件上傳時(shí)存放文件的臨時(shí)目錄,你必須給這個(gè)選項(xiàng)賦值,比如upload_tmp_dir ='/leapsoulcn',代表在C盤(pán)目錄下有一個(gè)leapsoulcn目錄,和session配置一樣,如果你是在linux環(huán)境下,你必須賦予這個(gè)目錄可寫(xiě)權(quán)限。
如何上傳超過(guò)8M的大文件?
上傳大文件主要涉及配置upload_max_filesize和post_max_size兩個(gè)選項(xiàng)。
php.ini配置文件中的默認(rèn)文件上傳大小為2M,php初學(xué)者容易犯的一個(gè)錯(cuò)誤是在編寫(xiě)文件上傳功能時(shí)通過(guò)設(shè)置上傳文件最大大小的表單區(qū)域,即允許上傳文件的最大值,max_file_size(隱藏值域)的值來(lái)規(guī)定上傳文件的大小,其實(shí)一般別人可以繞過(guò)這個(gè)值,所以安全起見(jiàn),最好是在php.ini配置文件中配置upload_max_filesize選項(xiàng),設(shè)定文件上傳的大小。
默認(rèn)upload_max_filesize = 2M,即文件上傳的大小為2M,如果你想上傳超過(guò)8M的文件,比如20M,你必須設(shè)定upload_max_filesize = 20M。
但是光設(shè)置upload_max_filesize = 20M還是無(wú)法實(shí)現(xiàn)大文件的上傳功能,你必須修改php.ini配置文件中的post_max_size選項(xiàng),其代表允許POST的數(shù)據(jù)最大字節(jié)長(zhǎng)度,默認(rèn)為8M。如果POST數(shù)據(jù)超出限制,那么$_POST和$_FILES將會(huì)為空。要上傳大文件,你必須設(shè)定該選項(xiàng)值大于upload_max_filesize指令的值,我一般設(shè)定upload_max_filesize和post_max_size值相等。另外如果啟用了內(nèi)存限制,那么該值應(yīng)當(dāng)小于memory_limit選項(xiàng)的值。
文件上傳的其他注意事項(xiàng)
在上傳大文件時(shí),你會(huì)有上傳速度慢的感覺(jué),當(dāng)超過(guò)一定的時(shí)間,會(huì)報(bào)腳本執(zhí)行超過(guò)30秒的錯(cuò)誤,這是因?yàn)樵趐hp.ini配置文件中max_execution_time配置選項(xiàng)在作怪,其表示每個(gè)腳本最大允許執(zhí)行時(shí)間(秒),0 表示沒(méi)有限制。你可以適當(dāng)調(diào)整max_execution_time的值,不推薦設(shè)定為0。
至此,在php.ini配置文件中對(duì)文件上傳選項(xiàng)進(jìn)行配置的PHP教程就介紹完畢了,通過(guò)上面的步驟實(shí)踐與學(xué)習(xí),再結(jié)合PHP程序,文件上傳功能就可以實(shí)現(xiàn)了。
下面是一些補(bǔ)充:
本文介紹了如何配置php.ini實(shí)現(xiàn)PHP文件上傳功能。其中涉及到php.ini配置文件中的upload_tmp_dir、upload_max_filesize、post_max_size等選項(xiàng),這些選項(xiàng)是文件上傳成敗的關(guān)鍵。我們以php.5.3.5的Windows版本為例說(shuō)明。
php.ini中文件上傳功能配置選項(xiàng)說(shuō)明用文本工具(推薦EditPlus)打開(kāi)php.ini 配置文件,查找 File Uploads ,在這個(gè)區(qū)域有以下3個(gè)選項(xiàng):
file_uploads = On
是否允許HTTP文件上傳。默認(rèn)值為On允許HTTP文件上傳,此選項(xiàng)不能設(shè)置為Off。
upload_tmp_dir =
文件上傳的臨時(shí)存放目錄。如果沒(méi)指定則PHP會(huì)使用系統(tǒng)默認(rèn)的臨時(shí)目錄。該選項(xiàng)默認(rèn)為空,此選項(xiàng)在手動(dòng)配置PHP運(yùn)行環(huán)境時(shí),也容易遺忘,如果不配置這個(gè)選項(xiàng),文件上傳功能就無(wú)法實(shí)現(xiàn),你必須給這個(gè)選項(xiàng)賦值,比如upload_tmp_dir = "d:/fileuploadtmp" ,代表在D盤(pán)目錄下有一個(gè)fileuploadtmp目錄,并且給這目錄讀寫(xiě)權(quán)限。
upload_max_filesize = 2M
上傳文件的最大尺寸。這個(gè)選項(xiàng)默認(rèn)值為2M,即文件上傳的大小為2M,如果你想上傳一個(gè)50M的文件,你必須設(shè)定 upload_max_filesize = 50M。但是僅設(shè)置upload_max_filesize = 50M 還是無(wú)法實(shí)現(xiàn)大文件的上傳功能,我們還必須修改php.ini文件中的 post_max_size 選項(xiàng)。
繼續(xù)在 php.ini 中查找 Data Handling ,在這個(gè)區(qū)域有1個(gè)選項(xiàng):
post_max_size = 8M
指通過(guò)表單POST給PHP的所能接收的最大值,包括表單里的所有值。默認(rèn)為8M。如果POST數(shù)據(jù)超出限制,那么$_POST和$_FILES將會(huì)為空。要上傳大文件,你必須設(shè)定該選項(xiàng)值大于upload_max_filesize選項(xiàng)的值,例如你設(shè)置了upload_max_filesize = 50M ,這里可以把post_max_size = 100M。另外如果啟用了內(nèi)存限制,那么該值應(yīng)當(dāng)小于memory_limit 選項(xiàng)的值。
繼續(xù)在 php.ini 中查找 Resource Limits ,在這個(gè)區(qū)域有3個(gè)選項(xiàng):
max_execution_time = 30
每個(gè)PHP頁(yè)面運(yùn)行的最大時(shí)間值(單位秒),默認(rèn)30秒。當(dāng)我們上傳一個(gè)較大的文件,例如50M的文件,很可能要幾分鐘才能上傳完,但php默認(rèn)頁(yè)面最久執(zhí)行時(shí)間為30秒,超過(guò)30秒,該腳本就停止執(zhí)行,這就導(dǎo)致出現(xiàn)無(wú)法打開(kāi)網(wǎng)頁(yè)的情況。因此我們可以把值設(shè)置的較大些,如 max_execution_time = 600。 如果設(shè)置為0,則表示無(wú)時(shí)間限制。
max_input_time = 60
每個(gè)PHP腳本解析請(qǐng)求數(shù)據(jù)所用的時(shí)間(單位秒),默認(rèn)60秒。當(dāng)我們上傳大文件時(shí),可以將這個(gè)值設(shè)置的較大些。 如果設(shè)置為0,則表示無(wú)時(shí)間限制。
memory_limit = 128M
這個(gè)選項(xiàng)用來(lái)設(shè)置單個(gè)PHP腳本所能申請(qǐng)到的最大內(nèi)存空間。這有助于防止寫(xiě)得不好的腳本消耗光服務(wù)器上的可用內(nèi)存。如果不需要任何內(nèi)存上的限制將其設(shè)為 -1。php5.2.0以前的版本默認(rèn)8M; php.5.2.0版本默認(rèn)為16M。php 5.2.0之后的版本默認(rèn)為 128M;
php.ini 配置上傳文件功能示例假設(shè)要上傳一個(gè)50M的大文件。配置 php.ini 如下:file_uploads = Onupload_tmp_dir = "d:/fileuploadtmp"upload_max_filesize = 50Mpost_max_size = 100Mmax_execution_time = 600max_input_time = 600memory_limit = 128M
提示:需要保持 memory_limit > post_max_size > upload_max_filesize
php.ini 簡(jiǎn)介
最后編輯于 :
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。
相關(guān)閱讀更多精彩內(nèi)容
- Bruce_Zhu 于 2017.5.16-* via.http://www.jb51.net/article/5...
- php.ini設(shè)置,上傳大文件: post_max_size = 128Mupload_max_filesize ...
- 架構(gòu)師必須知道的26項(xiàng)PHP安全實(shí)踐 PHP是一種開(kāi)源服務(wù)器端腳本語(yǔ)言,應(yīng)用很廣泛。Apache web服務(wù)器提供...
- Php:腳本語(yǔ)言,網(wǎng)站建設(shè),服務(wù)器端運(yùn)行 PHP定義:一種服務(wù)器端的HTML腳本/編程語(yǔ)言,是一種簡(jiǎn)單的、面向?qū)ο?..
- Spring Cloud為開(kāi)發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見(jiàn)模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...