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 数组包含以下属性−
-
$_FILES['file']['name'] − 用户选择要上传的文件的原始名称。
-
$_FILES['file']['type'] − 文件的 MIME 类型。一个示例是“image/gif”。但是,PHP 方面并未检查此 MIME 类型。
-
$_FILES['file']['size'] − 上传的文件大小(以字节为单位)。
-
$_FILES['file']['tmp_name'] − 已上传的文件在服务器上存储的临时文件名。
-
$_FILES['file']['full_path'] − 浏览器提交的完整路径。PHP 8.1.0 起可用。
-
$_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 按钮。
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 ,如下图所示 −