PHP實(shí)現(xiàn)文件上傳和多文件上傳_第1頁(yè)
PHP實(shí)現(xiàn)文件上傳和多文件上傳_第2頁(yè)
PHP實(shí)現(xiàn)文件上傳和多文件上傳_第3頁(yè)
PHP實(shí)現(xiàn)文件上傳和多文件上傳_第4頁(yè)
PHP實(shí)現(xiàn)文件上傳和多文件上傳_第5頁(yè)
已閱讀5頁(yè),還剩4頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

本文格式為Word版,下載可任意編輯——PHP實(shí)現(xiàn)文件上傳和多文件上傳PHP實(shí)現(xiàn)文件上傳和多文件上傳

PHP實(shí)現(xiàn)文件上傳和多文件上傳的相關(guān)資料,還為大家共享了解決如何修改PHP上傳文件的大小限制問(wèn)題的方法,需要的摯友可以參考下。

在PHP程序開(kāi)發(fā)中,文件上傳是一個(gè)使用分外普遍的功能,也是PHP程序員的必備技能之一。值得欣喜的是,在PHP中實(shí)現(xiàn)文件上傳功能要比在Java、C#等語(yǔ)言中簡(jiǎn)樸得多。下面我們結(jié)合概括的代碼實(shí)例來(lái)細(xì)致介紹如何通過(guò)PHP實(shí)現(xiàn)文件上傳和多文件上傳功能。

要使用PHP實(shí)現(xiàn)文件上傳功能,我們先來(lái)編寫(xiě)兩個(gè)php文件:index.php和upload.php。其中,index.php頁(yè)面用于提交文件上傳的表單苦求,upload.php頁(yè)面用于接收上傳的文件并舉行相應(yīng)處理。

首先,我們來(lái)編寫(xiě)一個(gè)簡(jiǎn)樸的index.php文件,由于其中涉及的主要是html代碼,對(duì)比簡(jiǎn)樸,因此不再贅述,index.php頁(yè)面的細(xì)致代碼如下:

?php

//設(shè)置編碼為UTF-8,以制止中文亂碼

headerContent-Type:text/html;charset=utf-8;

?

!DOCTYPEhtml

html

head

title文件上傳表單頁(yè)面/title

/head

body

formaction=upload.phpmethod=postenctype=multipart/form-data

文件1:inputname=upload_file1type=file/br/

文件2:inputname=upload_file2type=file/br/

inputtype=submitvalue=上傳/

/form

/body

/html

值得留神的是,由于在HTTP協(xié)議設(shè)計(jì)之初,它并不支持文件上傳功能,form表單的encrypt屬性的默認(rèn)值為application/x--form-urlencoded,它只能用于提交一般的表單苦求。假設(shè)提交的表單中包含需要上傳的文件,我們需要將enctype的屬性值改為multipart/form-data才能實(shí)現(xiàn)文件上傳功能。此外,method的屬性值務(wù)必為post。

接著,我們持續(xù)編寫(xiě)upload.php文件的代碼。

?php

//設(shè)置編碼為UTF-8,以制止中文亂碼

headerContent-Type:text/html;charset=utf-8;

$first_file=$_FILES[upload_file1];//獲取文件1的信息

$second_file=$_FILES[upload_file2];//獲取文件2的信息$upload_dir=D:/upload/;//保存上傳文件的目次//處理上傳的文件1

if$first_file[error]==UPLOAD_ERR_OK

//上傳文件1在服務(wù)器上的臨時(shí)存放路徑

$temp_name=$first_file[tmp_name];

//上傳文件1在客戶(hù)端計(jì)算機(jī)上的真實(shí)名稱(chēng)

$file_name=$first_file[name];

//移動(dòng)臨時(shí)文件夾中的文件1到存放上傳文件的目次,并重命名為真實(shí)名稱(chēng)

move_uploaded_file$temp_name,$upload_dir.$file_name;

echo[文件1]上傳告成!br/;

else

echo[文件1]上傳失敗!br/;

//處理上傳的文件2

if$second_file[error]==UPLOAD_ERR_OK

//上傳文件2在服務(wù)器上的臨時(shí)存放路徑

$temp_name=$second_file[tmp_name];

//上傳文件2在客戶(hù)端計(jì)算機(jī)上的真實(shí)名稱(chēng)

$file_name=$second_file[name];

//移動(dòng)臨時(shí)文件夾中的文件2到存放上傳文件的目次,并重命名為真實(shí)名稱(chēng)

move_uploaded_file$temp_name,$upload_dir.$file_name;

echo[文件2]上傳告成!br/;

else

echo[文件2]上傳失敗!br/;

?

在PHP中,當(dāng)欣賞器客戶(hù)端提交過(guò)來(lái)的表單苦求中包含上傳的文件時(shí),PHP會(huì)將上傳的`文件先暫時(shí)存放在臨時(shí)目次中在Windows操作系統(tǒng)中,默認(rèn)的臨時(shí)目次一般為C:/Windows/Temp,然后將上傳文件的相關(guān)信息存放在超全局變量$_FILES中。因此,我們只需要通過(guò)$_FILES數(shù)組獲取上傳的文件信息,然后對(duì)其舉行相應(yīng)的處理操作即可。下面,我們來(lái)看看通過(guò)欣賞器上傳A.gif和B.gif兩個(gè)圖片文件時(shí),使用print_r函數(shù)輸出超全局變量$_FILES的細(xì)致信息:

Array[upload_file1]=Array

PHP實(shí)現(xiàn)文件上傳和多文件上傳

[name]=A.gif客戶(hù)端上傳時(shí)的真實(shí)文件名稱(chēng)

[type]=image/gif文件的類(lèi)型

[tmp_name]=C:\Windows\Temp\php9803.tmp文件上傳到PHP服務(wù)器后臨時(shí)存放的路徑

[error]=0錯(cuò)誤信息,0表示沒(méi)有錯(cuò)誤

[size]=87123文件大小,單位為字節(jié)

[upload_file2]=Array

[name]=B.gif

[type]=image/gif

[tmp_name]=C:\Windows\Temp\php9813.tmp

[error]=0

[size]=93111

在上面的例子中,我們上傳的兩個(gè)文件參數(shù)名分別為upload_file1和upload_file2?,F(xiàn)在,我們讓表單中的多個(gè)文件以一致的參數(shù)名upload_file,將方才上傳的兩個(gè)文件以參數(shù)數(shù)組形式再次提交上傳。此時(shí),我們需要將index.php頁(yè)面中的兩個(gè)file文件域修改為如下html代碼:

文件1:inputname=upload_file[]type=file/br/

文件2:inputname=upload_file[]type=file/br/

此外,我們還需要對(duì)upload.php頁(yè)面舉行相應(yīng)的修改:

?php

//設(shè)置編碼為UTF-8,以制止中文亂碼

headerContent-Type:text/html;charset=utf-8;

$fileArray=$_FILES[upload_file];//獲取多個(gè)文件的信息,留神:這里的鍵名不包含[]

$upload_dir=D:/upload/;//保存上傳文件的目次

foreach$fileArray[error]as$key=$error

if$error==UPLOAD_ERR_OK//PHP常量UPLOAD_ERR_OK=0,表示上傳沒(méi)有出錯(cuò)

$temp_name=$fileArray[tmp_name][$key];

$file_name=$fileArray[name][$key];

move_uploaded_file$temp_name,$upload_dir.$file_name;

echo上傳[文件.$key.]告成!br/;

else

echo上傳[文件.$key.]失敗!br/;

?

同樣的,我們使用print_r函數(shù)來(lái)查看上面例子中的超全局變量$_FILES的細(xì)致信息:

Array

[upload_file]=Array

[name]=Array

[0]=A.gif

[1]=B.gif

[type]=Array

[0]=image/gif

[1]=image/gif

[tmp_name]=Array

[0]=C:\Windows\Temp\php87B9.tmp

[1]=C:\Windows\Temp\php87BA.tmp

[error]=Array

[0]=0

[1]=0

[size]=Array

[0]=87123

[1]=93111

備注1:在PHP的默認(rèn)配置下,上傳的文件大小超出確定的范圍將會(huì)出錯(cuò),請(qǐng)參文末提到的如何修改PHP上傳文件的大小限制問(wèn)題的解決方法。

備注2:上述處理文件上傳的PHP代碼只是一個(gè)簡(jiǎn)樸的入門(mén)例如,并不能直接作為正式代碼使用,由于還有大量需要額外留神的安好因素沒(méi)有考慮,例如:文件的類(lèi)型、文件的大小以及上傳文件的名稱(chēng)重復(fù)等。

備注3:假設(shè)上傳的文件名稱(chēng)中包含中文,可能引起文件名稱(chēng)亂碼問(wèn)題。此時(shí),需要使用函數(shù)iconv來(lái)轉(zhuǎn)換文件名稱(chēng)的編碼。

前面我們了解了如何使用PHP實(shí)現(xiàn)文件上傳和多文件上傳。不過(guò),在PHP的默認(rèn)配置處境下,當(dāng)上傳的文件大小超出確定的限制時(shí),我們將得到如下的錯(cuò)誤提示信息:

Warning:POSTContent-Lengthof625523488bytesexceedsthelimitof8388608bytesinUnknownonline0

上述錯(cuò)誤信息的大致意思是,我們使用POST苦求提交的數(shù)據(jù)大小超過(guò)了服務(wù)器的最大限制數(shù)8388608字節(jié)=8MB。

展現(xiàn)上述錯(cuò)誤的理由是,在PHP的配置文件php.ini中,默認(rèn)存在如下配置信息在php.ini中,行首的分號(hào);表示當(dāng)前行是解釋?zhuān)粫?huì)生效:

;腳本解析輸入數(shù)據(jù)類(lèi)似POST和GET允許的最大時(shí)間,單位是秒。它從接收全體數(shù)據(jù)到開(kāi)頭執(zhí)行腳本舉行測(cè)量的。

max_input_time=60

;允許客戶(hù)端單個(gè)POST苦求發(fā)送的最大數(shù)據(jù)

post_max_size=8M

;是否開(kāi)啟文件上傳功能

file_uploads=On

;文件上傳的臨時(shí)存放目次假設(shè)不指定,使用系統(tǒng)默認(rèn)的臨時(shí)目次

;upload_tmp_dir=

;允許單個(gè)苦求上傳的最大文件大小

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論