圖片上傳
創建一個文件上傳html表單
<html>
<body>
<form action="upload_file.php" method="post" enctype="multipart/form-data">
<label for="file">Filename:</label>
<input type="file" name="file" id="file" />
<br />
<input type="submit" name="submit" value="Submit" />
</form>
</body>
</html>
請留意如下有關此表單的信息:
<form> 標簽的 enctype 屬性規定了在提交表單時要使用哪種內容類型。在表單需要二進制數據時,比如文件內容,請使用 "multipart/form-data"。
<input> 標簽的 type="file" 屬性規定了應該把輸入作為文件來處理。舉例來說,當在瀏覽器中預覽時,會看到輸入框旁邊有一個瀏覽按鈕。
創建上傳腳本並保存相關信息到數據庫(upload_file.php文件代碼)
<?php include "conn.php"; //數據庫連接文件 if (($_FILES["file"]["type"] == "image/gif" || $_FILES["file"]["type"] == "image/jpeg" || $_FILES["file"]["type"] == "image/png" || $_FILES["file"]["type"] == "image/jpg"
|| $_FILES["file"]["type"] == "image/pjpeg") && $_FILES["file"]["size"] < 2 * 1024 * 1024) { //限制上傳文件的大小,單位B 。這里表示2M if ($_FILES["file"]["error"] > 0) { // error為0表示上傳成功 echo "Return Code: " . $_FILES["file"]["error"] . "<br />"; //上傳失敗返回錯誤代碼 } else { $filename = date("YmdHis") . rand() . '.png'; //日期+隨機數命名圖片並轉移保存 move_uploaded_file($_FILES["file"]["tmp_name"], "upload/" . $filename); //存入數據庫名字和路徑 $title = $filename; $path = 'upload/' . $filename; //注意:insert語句后 values后的格式 ('".$變量名."') $query = mysqli_query($conn, "insert into images(title,path) values ('" . $title . "','" . $path . "')"); echo "<script>alert('上傳成功!正在返回...');window.location.href='index.php';</script>"; } } else { echo "Invalid file"; }
注釋:
1、通過使用 PHP 的全局數組 $_FILES,你可以獲取客戶計算機向遠程服務器上傳文件的相關信息。
第一個參數是表單的 input name,第二個下標可以是 "name", "type", "size", "tmp_name" 或 "error"。就像這樣:
在這個腳本中,我們增加了對文件上傳的限制。用戶只能上傳 .gif 或 .jpeg 文件,文件大小必須小於 20 kb:
(對於 IE,識別 jpg 文件的類型必須是 pjpeg,對於 FireFox,必須是 jpeg)
- $_FILES["file"]["name"] - 上傳文件的名稱
- $_FILES["file"]["type"] - 上傳文件的類型
- $_FILES["file"]["size"] - 上傳文件的大小,以字節計
- $_FILES["file"]["tmp_name"] - 存儲在服務器的文件的臨時副本的名稱
- $_FILES["file"]["error"] - 由文件上傳導致的錯誤代碼
在這個腳本中,我們增加了對文件上傳的限制。用戶只能上傳 .gif 或 .jpeg 文件,文件大小必須小於 20 kb:
(對於 IE,識別 jpg 文件的類型必須是 pjpeg,對於 FireFox,必須是 jpeg)
2、保存被上傳的文件
上面的例子在服務器的 PHP 臨時文件夾創建了一個被上傳文件的臨時副本。這個臨時的復制文件會在腳本結束時消失。要保存被上傳的文件,我們需要把它拷貝到另外的位置。