Php 简明教程

PHP - $_FILES

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

当 HTML 表单包含文件类型的输入元素,其 enctype 属性设置为 multipart/form-data,且方法属性设置为 HTTP POST 方法时,便会上传文件。

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

以下 HTML 脚本包含一个 input 元素的 file 类型的表单——

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

这个“输入类型”渲染出一个带有文件标题的按钮。点击时,会出现一个文件对话框。您可以选择要上传的文件。

服务器上的 PHP 脚本可以访问 $_FILES 变量中的文件数据。

$_FILES 数组包含以下属性−

  1. $_FILES['file']['name'] − 用户选择要上传的文件的原始名称。

  2. $_FILES['file']['type'] − 文件的 MIME 类型。一个示例是“image/gif”。但是,PHP 方面并未检查此 MIME 类型。

  3. $_FILES['file']['size'] − 上传的文件大小(以字节为单位)。

  4. $_FILES['file']['tmp_name'] − 已上传的文件在服务器上存储的临时文件名。

  5. $_FILES['file']['full_path'] − 浏览器提交的完整路径。PHP 8.1.0 起可用。

  6. $_FILES['file']['error'] −与此文件上传关联的错误代码。

error codes 如下枚举−

Error Codes

Description

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)

No file was uploaded.

UPLOAD_ERR_NO_TMP_DIR (Value=6)

Missing a temporary folder.

UPLOAD_ERR_CANT_WRITE (Value=7)

未能将文件写入磁盘。

UPLOAD_ERR_EXTENSION (Value=8)

PHP 扩展停止了文件上传。

Example

以下“test.html”包含一个 HTML 表单,其 enctype 设置为 multiform/form-data。它还具有一个输入文件元素,该元素在表单上显示一个按钮,供用户选择要上传的文件。将此文件保存在 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 在浏览器窗口中渲染一个名为“选择文件”的按钮。要打开文件对话框,请单击“选择文件”按钮。当出现所选文件的名称时,请单击 submit 按钮。

php $ files 1

Example

文档根目录中的服务器端 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>";
?>

它将生成以下 output

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

Example

在 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