PHP - $_FILES 变量



$_FILES 是 PHP 的“超全局变量”或自动全局变量之一。它在整个脚本的所有范围内都可用。变量 $_FILES 是一个关联数组,其中包含通过 HTTP POST 方法上传的项目。

当 HTML 表单包含具有文件类型的 input 元素,其 enctype 属性设置为 multipart/form-data,并且 method 属性设置为 HTTP POST 方法时,将上传文件。

$HTTP_POST_FILES 也包含相同的信息,但它不是超全局变量,现在已被弃用。

以下 HTML 脚本包含一个表单,其 input 元素的文件类型为 -


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

此 “input type” 呈现一个标题为 file 的按钮。单击后,会弹出一个文件对话框。您可以选择要上传的文件。

服务器上的 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 (Value=0)

没有错误,文件上传成功。

UPLOAD_ERR_INI_SIZE (Value=1)

上传文件超过了 php.ini 中的 upload_max_filesize 指令。

UPLOAD_ERR_FORM_SIZE (Value=2)

上传的文件超过MAX_FILE_SIZE。

UPLOAD_ERR_PARTIAL (Value=3)

上传的文件仅上传了部分内容。

UPLOAD_ERR_NO_FILE (Value=4)

未上传任何文件。

UPLOAD_ERR_NO_TMP_DIR (Value=6)

缺少临时文件夹。

UPLOAD_ERR_CANT_WRITE (Value=7)

无法将文件写入磁盘。

UPLOAD_ERR_EXTENSION (Value=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 http://localhost/hello.html 如下所示 -

PHP $_Files 2