$_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 上传后会生成在系统临时目录,脚本执行完毕未移动会自动删除