php 多文件上傳
介紹了PHP上傳單個(gè)文件的過(guò)程。但是有些時(shí)候,為了使用方便,我們需要滿足同時(shí)上傳多個(gè)文件的需求。多文件上傳原理相同,不過(guò)在處理數(shù)據(jù)時(shí),需要對(duì)上傳數(shù)據(jù)進(jìn)行特殊處理。
<html> <head> <meta charset="utf-8" /> <title>單文件上傳</title> </head> <body> <form action="morefile.php" method="post" enctype="multipart/form-data"> <input type="file" name="file[]"> <input type="file" name="file[]"> <input type="submit" value="上傳"> </form> </body> </html>
這里是一個(gè)簡(jiǎn)易的上傳頁(yè)面,form表單同時(shí)提交了兩個(gè)文件。我們 可以通過(guò)這個(gè)頁(yè)面提交內(nèi)容。
注意:
1.input type="file" name="file[]"與之前相比f(wàn)ile后多加了一個(gè)中括號(hào)
2.寫(xiě)了2個(gè)或者多個(gè)input type="file" name="file[]"
我們使用 $_FILES 來(lái)接收文件信息,打印并查看數(shù)組:
<?php var_dump($_FILES); //打印$_FILES查看數(shù)組結(jié)構(gòu) ?>
數(shù)組結(jié)構(gòu)如下
array (size=1) 'file' => array (size=5) 'name' => array (size=2) //文件名 0 => string 'psu.jpg' (length=7) 1 => string 'qwe.jpg' (length=7) //文件mime類(lèi)型 'type' => array (size=2) 0 => string 'image/jpeg' (length=10) 1 => string 'image/jpeg' (length=10) //緩存文件 'tmp_name' => array (size=2) 0 => string 'E:\wamp\tmp\phpF6D5.tmp' (length=23) 1 => string 'E:\wamp\tmp\phpF6F5.tmp' (length=23) //文件錯(cuò)誤信息 'error' => array (size=2) 0 => int 0 1 => int 0 //文件大小 'size' => array (size=2) 0 => int 225824 1 => int 151651
我們可以看到,兩個(gè)文件被存儲(chǔ)在一個(gè)數(shù)組中,鍵名和上傳單文件是相同。所以,需要我們用for()循環(huán),來(lái)分別取出兩個(gè)文件的需要用到的數(shù)據(jù)。
在$_FILES中同時(shí)保存了兩個(gè)文件的數(shù)據(jù),我們需要使用一個(gè)簡(jiǎn)單的循環(huán),來(lái)讀取單個(gè)文件的信息,并將文件移動(dòng)到我們想要放的位置。
<?php for ($i=0; $i < count($_FILE['file']['name']); $i++) { /* 用is_uploaded_file()函數(shù)判斷是上傳文件 并且沒(méi)有出現(xiàn)錯(cuò) */ if(is_uploaded_file($_FILEs['file']['tmp_name'][$i]) && $_FILEs['file']['error'][$i] == 0){ if(move_uploaded_file($_FILEs['file']['tmp_name'][$i],'upload/'.$_FILE['file']['name'][$i])){ //用move_uploaded_file()函數(shù)移動(dòng)文件到指定的位置并使用文件原名 echo "上傳成功"; }else{ echo '上傳失敗'; } }else{ echo '上傳失敗'; } } ?>
詳細(xì)的判斷過(guò)程,參見(jiàn)單文件上傳,這里只做了基本的判斷,并沒(méi)有對(duì)文件的大小及格式提醒。
請(qǐng)按照業(yè)務(wù),自行判斷文件大小及格式進(jìn)行錯(cuò)誤提醒。