php $_FILES

作者admin

8月 28, 2025

$_FILES 是 PHP 内置的 超全局数组,用来接收客户端通过 <form enctype=”multipart/form-data”> 上传的文件信息。

  • 自动生成,随请求到 PHP
  • 关联数组形式,每个上传控件对应一个键名

<form action=”upload.php” method=”post” enctype=”multipart/form-data”>
<input type=”file” name=”file1″>
<input type=”file” name=”file2″>
<button type=”submit”>上传</button>
</form>

上传后,PHP 会生成:

$_FILES = [
‘file1’ => [
‘name’ => ‘example1.jpg’,
‘type’ => ‘image/jpeg’,
‘tmp_name’ => ‘/tmp/php7a3x5’,
‘error’ => 0,
‘size’ => 102400
],
‘file2’ => [
‘name’ => ‘example2.png’,
‘type’ => ‘image/png’,
‘tmp_name’ => ‘/tmp/php7b4y6’,
‘error’ => 0,
‘size’ => 204800
]
];

$_FILES 的字段解释

字段名 类型 说明
$_FILES['file']['name'] string 上传文件的原始文件名
$_FILES['file']['type'] string 文件 MIME 类型(浏览器提供,不可靠)
$_FILES['file']['tmp_name'] string PHP 在服务器上生成的临时文件路径
$_FILES['file']['error'] int 上传错误码,0 表示成功
$_FILES['file']['size'] int 上传文件大小,单位字节

error 错误码说明

错误码 常量 含义
0 UPLOAD_ERR_OK 上传成功
1 UPLOAD_ERR_INI_SIZE 超过 php.ini 的 upload_max_filesize 限制
2 UPLOAD_ERR_FORM_SIZE 超过表单 MAX_FILE_SIZE 限制
3 UPLOAD_ERR_PARTIAL 文件只有部分被上传
4 UPLOAD_ERR_NO_FILE 没有上传文件
6 UPLOAD_ERR_NO_TMP_DIR 临时文件夹不存在
7 UPLOAD_ERR_CANT_WRITE 写入失败
8 UPLOAD_ERR_EXTENSION 被 PHP 扩展中断

多文件上传

<input type=”file” name=”files[]” multiple>

foreach ($_FILES[‘files’][‘name’] as $i => $name) {
$tmpName = $_FILES[‘files’][‘tmp_name’][$i];
$error = $_FILES[‘files’][‘error’][$i];
$size = $_FILES[‘files’][‘size’][$i];

// 处理上传
}

  • $_FILES[‘files’] 变成 多维数组
  • 使用索引遍历每个文件

注意事项

move_uploaded_file() 会把 PHP 临时文件移动到目标位置

千万不要直接操作 tmp_name,用 move_uploaded_file 才安全

必须设置 form 的 enctype=”multipart/form-data”

上传大小限制:

PHP.ini: upload_max_filesize 和 post_max_size

HTML: <input type=”hidden” name=”MAX_FILE_SIZE” value=”4194304″>(可选)

安全:不要直接使用原文件名,建议改名或加时间戳/UUID

临时文件:PHP 上传后会生成在系统临时目录,脚本执行完毕未移动会自动删除

php的$_FILES如何生成的?

作者 admin

百度广告效果展示