2345技术员联盟

PHP 文件上傳

  • 来源:未知 原创
  • 时间:2018-07-18
  • 阅读:
  • 本文标签:

PHP 文件上傳


本節將介紹 PHP 中文件是如何上傳的。

通過 PHP,可以把文件上傳到服務器。

創建一個文件上傳表單


允許用戶從表單上傳文件是非常有用的。

請看下面這個供上傳文件的 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> 

有關上面的 HTML 表單的一些註意項列舉如下:

<form> 標簽的 enctype 屬性規定了在提交表單時要使用哪種內容類型。在表單需要二進制數據時,比如文件內容,請使用 "multipart/form-data"。

<input> 標簽的 type="file" 屬性規定了應該把輸入作為文件來處理。舉例來說,當在瀏覽器中預覽時,會看到輸入框旁邊有一個瀏覽按鈕。

註釋:允許用戶上傳文件是一個巨大的安全風險。請僅僅允許可信的用戶執行文件上傳操作。

創建上傳腳本


"upload_file.php" 文件含有供上傳文件的代碼:

 <?php

 if ($_FILES["file"]["error"] > 0)

 {

 echo "Error: " . $_FILES["file"]["error"] . "<br>";

 }

 else

 {

 echo "Upload: " . $_FILES["file"]["name"] . "<br>";

 echo "Type: " . $_FILES["file"]["type"] . "<br>";

 echo "Size: " . ($_FILES["file"]["size"] / 1024) . " kB<br>";

 echo "Stored in: " . $_FILES["file"]["tmp_name"];

 }

 ?> 

通過使用 PHP 的全局數組 $_FILES,你可以從客戶計算機向遠程服務器上傳文件。

第一個參數是表單的 input name,第二個下標可以是 "name"、"type"、"size"、"tmp_name" 或 "error"。如下所示:

$_FILES["file"]["name"] - 被上傳文件的名稱

$_FILES["file"]["type"] - 被上傳文件的類型

$_FILES["file"]["size"] - 被上傳文件的大小,以字節計

$_FILES["file"]["tmp_name"] - 存儲在服務器的文件的臨時副本的名稱

$_FILES["file"]["error"] - 由文件上傳導致的錯誤代碼

這是一種非常簡單文件上傳方式。基於安全方面的考慮,您應當增加有關允許哪些用戶上傳文件的限制。

上傳限制


在這個腳本中,我們增加了對文件上傳的限制。用戶只能上傳 .gif 和 .jpeg 文件,文件大小必須小於 20 kB:

 <?php

 $allowedExts = array("gif", "jpeg", "jpg", "png");

 $temp = explode(".", $_FILES["file"]["name"]);

$extension = end($temp);

 if ((($_FILES["file"]["type"] == "image/gif")

 || ($_FILES["file"]["type"] == "image/jpeg")

 || ($_FILES["file"]["type"] == "image/jpg")

|| ($_FILES["file"]["type"] == "image/pjpeg")

|| ($_FILES["file"]["type"] == "image/x-png")

 || ($_FILES["file"]["type"] == "image/png"))

 && ($_FILES["file"]["size"] < 20000)

 && in_array($extension, $allowedExts))

 {

 if ($_FILES["file"]["error"] > 0)

 {

 echo "Error: " . $_FILES["file"]["error"] . "<br>";

 }

 else

 {

 echo "Upload: " . $_FILES["file"]["name"] . "<br>";

 echo "Type: " . $_FILES["file"]["type"] . "<br>";

 echo "Size: " . ($_FILES["file"]["size"] / 1024) . " kB<br>";

 echo "Stored in: " . $_FILES["file"]["tmp_name"];

 }

 }

 else

 {

 echo "Invalid file";

 }

 ?> 


保存被上傳的文件


上面的實例在服務器的 PHP 臨時文件夾中創建了一個被上傳文件的臨時副本。

這個臨時的副本文件會在腳本結束時消失。要保存被上傳的文件,我們需要把它拷貝到另外的位置:

 <?php

 $allowedExts = array("gif", "jpeg", "jpg", "png");

 $temp = explode(".", $_FILES["file"]["name"]);

$extension = end($temp);

 if ((($_FILES["file"]["type"] == "image/gif")

 || ($_FILES["file"]["type"] == "image/jpeg")

 || ($_FILES["file"]["type"] == "image/jpg")

|| ($_FILES["file"]["type"] == "image/pjpeg")

|| ($_FILES["file"]["type"] == "image/x-png")

 || ($_FILES["file"]["type"] == "image/png"))

 && ($_FILES["file"]["size"] < 20000)

 && in_array($extension, $allowedExts))

 {

 if ($_FILES["file"]["error"] > 0)

 {

 echo "Return Code: " . $_FILES["file"]["error"] . "<br>";

 }

 else

 {

 echo "Upload: " . $_FILES["file"]["name"] . "<br>";

 echo "Type: " . $_FILES["file"]["type"] . "<br>";

 echo "Size: " . ($_FILES["file"]["size"] / 1024) . " kB<br>";

 echo "Temp file: " . $_FILES["file"]["tmp_name"] . "<br>";


 if (file_exists("upload/" . $_FILES["file"]["name"]))

 {

 echo $_FILES["file"]["name"] . " already exists. ";

 }

 else

 {

 move_uploaded_file($_FILES["file"]["tmp_name"],

 "upload/" . $_FILES["file"]["name"]);

 echo "Stored in: " . "upload/" . $_FILES["file"]["name"];

 }

 }

 }

 else

 {

 echo "Invalid file";

 }

 ?> 

上面的腳本檢測了文件是否已存在,如果不存在,則把文件拷貝到名為 "upload" 的文件夾。

在下一節內容中,你將了解 PHP Cookies。


相关文章

本文来自电脑技术网www.it892.com),转载本文请注明来源.
本文链接:http://www.it892.com/content/web/php/0GQ0E122018.html

推荐阅读
无觅相关文章插件,快速提升流量