PHP - $_FILES



$_FILES 是 PHP 中的“超全域性”或自動全域性變數之一。它在整個指令碼的所有作用域中都可用。$_FILES 變數是一個關聯陣列,包含透過 HTTP POST 方法上傳的專案。

當 HTML 表單包含一個檔案型別的輸入元素、其 enctype 屬性設定為 multipart/form-data 以及 method 屬性設定為 HTTP POST 方法時,就會上傳檔案。

$HTTP_POST_FILES 也包含相同的資訊,但它不是超全域性變數,現在已被棄用。

下面的 HTML 指令碼包含一個表單,其中包含input 元素的file 型別:

<input type="file" name="file">

此“input type”呈現一個標題為檔案的按鈕。單擊時,會彈出一個檔案對話方塊。您可以選擇要上傳的檔案。

伺服器上的 PHP 指令碼可以在 $_FILES 變數中訪問檔案資料。

$_FILES 陣列包含以下屬性:

  • $_FILES['file']['name'] - 使用者選擇上傳檔案的原始名稱。

  • $_FILES['file']['type'] - 檔案的 MIME 型別。例如“image/gif”。但是,此 MIME 型別不會在 PHP 端進行檢查。

  • $_FILES['file']['size'] - 上傳檔案的位元組大小。

  • $_FILES['file']['tmp_name'] - 上傳檔案在伺服器上儲存的臨時檔名。

  • $_FILES['file']['full_path'] - 瀏覽器提交的完整路徑。PHP 8.1.0 起可用。

  • $_FILES['file']['error'] - 與此檔案上傳關聯的錯誤程式碼。

錯誤程式碼如下所示:

錯誤程式碼 描述

UPLOAD_ERR_OK (值=0)

沒有錯誤,檔案上傳成功。

UPLOAD_ERR_INI_SIZE (值=1)

上傳的檔案超過了 php.ini 中的 upload_max_filesize 指令。

UPLOAD_ERR_FORM_SIZE (值=2)

上傳的檔案超過了 MAX_FILE_SIZE。

UPLOAD_ERR_PARTIAL (值=3)

上傳的檔案僅部分上傳。

UPLOAD_ERR_NO_FILE (值=4)

沒有上傳檔案。

UPLOAD_ERR_NO_TMP_DIR (值=6)

缺少臨時資料夾。

UPLOAD_ERR_CANT_WRITE (值=7)

無法將檔案寫入磁碟。

UPLOAD_ERR_EXTENSION (值=8)

PHP 擴充套件阻止了檔案上傳。

示例

下面的“test.html”包含一個 HTML 表單,其 enctype 設定為 multiform/form-data。它還有一個 input file 元素,該元素在表單上顯示一個按鈕,供使用者選擇要上傳的檔案。將此檔案儲存在 Apache 伺服器的文件根目錄資料夾中。

<html>
<body>
   <form action="hello.php" method="POST" enctype="multipart/form-data">
      <p><input type="file" name="file"></p>
      <p><input type ="submit" value="submit"></p>
   </form>
</body>
</html>

上面的 HTML 在瀏覽器視窗中呈現一個名為“選擇檔案”的按鈕。要開啟檔案對話方塊,請單擊“選擇檔案”按鈕。顯示所選檔名稱後,單擊提交按鈕。

PHP $ Files 1

示例

文件根目錄資料夾中的伺服器端 PHP 指令碼(upload.php)讀取 $_FILES 陣列變數如下:

<?php
   echo "Filename: " . $_FILES['file']['name']."<br>";
   echo "Type : " . $_FILES['file']['type'] ."<br>";
   echo "Size : " . $_FILES['file']['size'] ."<br>";
   echo "Temp name: " . $_FILES['file']['tmp_name'] ."<br>";
   echo "Error : " . $_FILES['file']['error'] . "<br>";
?>

它將產生以下輸出

Filename: abc.txt
Type : text/plain
Size : 556762
Temp name: C:\xampp\tmp\phpD833.tmp
Error : 0

示例

在 PHP 中,您可以使用 HTML 陣列功能上傳多個檔案:

<html>
<body>
   <form action="hello.php" method="POST" enctype="multipart/form-data">
      <input type="file" name="files[]"/>
      <input type="file" name="files[]"/>
      <input type ="submit" value="submit"/>
   </form>
</body>
</html>

現在,將 PHP 指令碼(hello.php)更改為:

<?php
   foreach ($_FILES["files"]["name"] as $key => $val) {       
      echo "File uploaded: $val <br>";
   }
?>

瀏覽器將顯示多個“選擇檔案”按鈕。上傳選定的檔案後,單擊“提交”按鈕,瀏覽器將顯示對 URL https:///hello.html 的響應中的檔名,如下所示:

PHP $ Files 2
廣告