php實作圖片上傳功能的方法:先建立儲存圖片的資料夾;然後建立HTML部分;接著建立「uploadHandler.php」檔案;最後將檔案的圖片格式與陣列中的元素進行比較並實現上傳即可。
推薦:《PHP影片教學》
PHP 中的圖片上傳動作
前端程式設計中,有時需要允許瀏覽者上傳某張圖片,這樣的功能我們可以透過PHP 來實現。
一. 建立儲存圖片的資料夾
在這裡,我們建立資料夾「 file 」 來存放使用者上傳的圖片,此時資料夾是空的,資料夾建立位址可以自己選擇,但是最好建立在方便使用的位置。
二. 建立HTML 部分(uploadfile.html)
這裡我們使用了HTML 的form 表單標籤,以及表單中的
<input type="file">来选择图片文件 <input type="submit">来提交图片相关信息
程式碼如下:
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title></title> </head> <body> <form action="uploadHandler.php" method="post" enctype="multipart/form-data"> Upload Img:<input type="file" name="img"/> <input type="submit" value="Upload"/> </form> </body> </html>
注意:
1. form 表單裡的action 連接到之後會建立的處理圖片上傳的.php 檔案。
2. 在 form 的屬性中必須註明enctype="multipart/form-data"。 enctype 屬性規定在將表單資料傳送到伺服器之前如何對其進行編碼。 multipart/form-data不對字元編碼。當使用有文件上傳控制項的表單時,該值是必要的。
3. 在這裡,我們使用的是 post 方法。
三.建立PHP 部分(uploadHandler.php)
1. 原理
我們建立一個php 文件,在其中只輸入
<?php var_dump($_FILES); ?>
那麼我們會印到一個對應的陣列arr(1)。
arr(1)的陣列結構為:
array(1) { ["img"]=> array(5) { ["name"]=> string(**) "AAAAAAA.jpg" // 图片名 ["type"]=> string(10) "image/jpeg" // 图片格式 ["tmp_name"]=> string(45) "/Applications/XAMPP/xamppfiles/temp/phpVZQY0m" // 图片缓存地址 ["error"]=> int(0) // 上传图片错误数 ["size"]=> int(124246) // 图片大小 } }
在array 陣列下有一個元素["img"] ,而在["img"] 下是一個二維數組,這個二維數組有五個元素,分別為:name / type / tmp_name / error / size。
透過這幾個屬性我們得到了一個圖片的基本訊息,下一步我們要透過對這幾個基本屬性進行判斷而將圖片存進資料夾。
2. 實際操作
進行以下判斷:
error [有]:提示錯誤❌
error [無]:下一步✅
╙type[非img]:提示錯誤❌
╙type[img]:下一步✅
#_222204422[142020202020202020202020202020]:改變錯誤。 # ╙type[jpeg]:下一步✅
如果滿足如上的判斷,那麼我們認為這張圖片是可以保存的。
為避免圖片命名的重複,我們使用時間戳概念,拼接成一個新的檔案名,讓每張圖片的命名都是唯一的。
且我們可以創建一個數組,數組內的元素是各種圖片格式,將文件的圖片格式與數組中的元素進行比較,不是我們認可的圖片格式將不予保存。
程式碼如下:
<?php // 接收文件 var_dump($_FILES); // 区别于$_POST、$_GET print_r($_FILES); $file = $_FILES["img"]; // 先判断有没有错 if ($file["error"] == 0) { // 成功 // 判断传输的文件是否是图片,类型是否合适 // 获取传输的文件类型 $typeArr = explode("/", $file["type"]); if($typeArr[0]== "image"){ // 如果是图片类型 $imgType = array("png","jpg","jpeg"); if(in_array($typeArr[1], $imgType)){ // 图片格式是数组中的一个 // 类型检查无误,保存到文件夹内 // 给图片定一个新名字 (使用时间戳,防止重复) $imgname = "file/".time().".".$typeArr[1]; // 将上传的文件写入到文件夹中 // 参数1: 图片在服务器缓存的地址 // 参数2: 图片的目的地址(最终保存的位置) // 最终会有一个布尔返回值 $bol = move_uploaded_file($file["tmp_name"], $imgname); if($bol){ echo "上传成功!"; } else { echo "上传失败!"; }; }; } else { // 不是图片类型 echo "没有图片,再检查一下吧!"; }; } else { // 失败 echo $file["error"]; }; ?>
四. 上傳圖片
此時,如果各項都符合要求,那麼在file 資料夾內就存有了我們上傳的圖片。上傳成功!
以上是php如何實現圖片上傳功能的詳細內容。更多資訊請關注PHP中文網其他相關文章!