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://127.0.0.1/hello.html 的响应中的文件名,如下所示:

PHP $ Files 2
广告