高手教你PHP上傳多張圖片
學(xué)習(xí)PHP時(shí),你可能會(huì)遇到PHP上傳多張圖片問題,這里將介紹PHP上傳多張圖片問題的解決方法,在這里拿出來(lái)和大家分享一下。單張的圖片上傳是不復(fù)雜的,這里涉及到PHP上傳多張圖片和對(duì)圖片格式的校驗(yàn),保證上傳的一定是圖片,防止上傳其他文件到服務(wù)器。
#T#基本實(shí)現(xiàn)算法是使用數(shù)組的形式,把所有的圖片提交個(gè)一個(gè)數(shù)組,對(duì)數(shù)組的元素進(jìn)行一個(gè)個(gè)的處理。PHP其實(shí)不過(guò)是Web服務(wù)器的一個(gè)模塊功能,所以首先要保證Web服務(wù)器的安全。當(dāng)然Web服務(wù)器要安全又必須是先保證系統(tǒng)安全,這樣就扯遠(yuǎn)了,無(wú)窮無(wú)盡。PHP可以和各種Web服務(wù)器結(jié)合,這里也只討論Apache。非常建議以chroot方式安裝啟動(dòng)Apache,這樣即使Apache和PHP及其腳本出現(xiàn)漏洞,受影響的也只有這個(gè)禁錮的系統(tǒng),不會(huì)危害實(shí)際系統(tǒng)。以下為引用的內(nèi)容:
- <?php
- //圖片目錄
- $img_dir="../upload/";
- //……h(huán)tml顯示上傳界面
- /*圖片上傳處理*/
- //把圖片傳到服務(wù)器
- //初始化變量
- $uploaded=0;
- $unuploaded=0;
- //只允許五張圖片上傳
- for($i=0;$i<=5;$i++)
- {
- //獲取當(dāng)前圖片的信息
- $is_file=$_FILES['imgfile']['name'][$i];
- //如果當(dāng)前圖片不為空
- if(!empty($is_file))
- {
- //把當(dāng)前圖片的信息存儲(chǔ)到變量里
- $result[$i]="
- <trclasstrclass=td2align=center>
- <td>".$_FILES['imgfile']['name'][$i]."</td>
- <td>".round($_FILES['imgfile']['size'][$i]/1024,2)."K</td>
- <td>".$_FILES['imgfile']['type'][$i]."</td>
- <td>";
- //判斷上傳的圖片的類型是不是jpg,gif,png,bmp中的一種,同時(shí)判斷是否上傳成功
- if(
- $_FILES['imgfile']['type'][$i]=="image/pjpeg"||
- $_FILES['imgfile']['type'][$i]=="image/gif"||
- $_FILES['imgfile']['type'][$i]=="image/x-png"||
- $_FILES['imgfile']['type'][$i]=="image/bmp"
- )
- {
- //如果上傳的文件沒有在服務(wù)器上存在
- if(!file_exists($img_dir.$_FILES['imgfile']['name'][$i]))
- {
- //把圖片文件從臨時(shí)文件夾中轉(zhuǎn)移到我們指定上傳的目錄中
- move_uploaded_file($_FILES['imgfile']['tmp_name'][$i],
- $img_dir.$_FILES['imgfile']['name'][$i]);
- $result[$i].="成功";
- $uploaded++;
- }
- else//如果文件已經(jīng)在服務(wù)器上存在
- {
- $result[$i].="<fontcolor=red>文件已存在</font>";
- $unuploaded++;
- continue;
- }
- }
- else
- {
- $result[$i].="<fontcolor=red>失敗</font>";
- $unuploaded++;
- }
- $result[$i].="</td></tr>";
- }//endif
- }//endfor
- //如果沒有選擇任何圖片
- if(empty($result))
- {
- prompt_msg("錯(cuò)誤信息","沒有選擇任何圖片。","返回上一步","uploadimg.php?action=upload");
- exit();
- }
- //顯示所有上傳后的結(jié)果
- echo"<tablecellpaddingtablecellpadding=4cellspacing=1border=0class=tablewidth=400align=left>
- <trclasstrclass=navialign=center>
- <td>文件名</td>
- <td>大小</td>
- <td>類型</td>
- <td>上傳結(jié)果</td>
- </tr>
- ";
- foreach($resultas$value)
- {
- echo$value;
- }
- echo"<trclasstrclass=td1>
- <tdcolspantdcolspan=4>共上傳".($uploaded+$unuploaded).",成功:$uploaded,失敗:<fontcolorfontcolor=red>$unuploaded</font></td>
- </tr>
- <trclasstrclass=navi>
- <tdcolspantdcolspan=4align=center>[<ahrefahref='uploadimg.php?action=upload'title='繼續(xù)上傳'>繼續(xù)上傳</a>]
[<ahrefahref='image.php'title='瀏覽圖片'>瀏覽圖片</a>]</td>- </tr>
- </table>
- ";
- ?>