PHP上传多文件循环处理数组表单
时间:2026-11-15 07:17 作者:emer 分类: PHP
前言
表单一次上传多个文件,input name 要写成数组形式 file[],$_FILES 结构会变成多维数组,需要循环逐个处理。本文讲解数组表单写法、遍历 $_FILES、逐个校验移动和常见结构差异。
操作步骤
1. 表单多选文件
<form method="post" enctype="multipart/form-data">
<input type="file" name="files[]" multiple>
<button>上传</button>
</form>
2. 遍历处理每个文件
$count = count($_FILES['files']['name']);
for ($i = 0; $i < $count; $i++) {
$tmp = $_FILES['files']['tmp_name'][$i];
$name = $_FILES['files']['name'][$i];
$size = $_FILES['files']['size'][$i];
$err = $_FILES['files']['error'][$i];
if ($err !== UPLOAD_ERR_OK) continue;
$ext = strtolower(pathinfo($name, PATHINFO_EXTENSION));
$newName = uniqid() . '.' . $ext;
move_uploaded_file($tmp, '/upload/' . $newName);
}
3. 检查上传错误码
if ($_FILES['files']['error'][$i] === UPLOAD_ERR_INI_SIZE) {
echo '超过上传大小限制';
}
4. 限制数量和单个大小
if ($count > 5) exit('最多上传5个');
5. 逐个做 MIME/扩展名校验(同单文件)。
常见坑
- input name 写成 files(不带 []),多文件只收到最后一个。
- 误以为 $_FILES 结构和单文件一样,索引方式搞错。
- 循环内不判 error,上传失败的空临时文件被移动。
- 总大小受 post_max_size 限制,超出整个 $_FILES 为空。
- 未逐个重命名,同名文件互相覆盖。
- 目录无写权限,move_uploaded_file 失败。
- 多文件总数和单文件大小上限要分别配置 php.ini。
总结
多文件用 name="files[]" multiple,$_FILES 按下标成数组,循环里逐个取 tmp_name/error/size,判错误、重命名、移动。注意 post_max_size、单文件校验和数量限制,每个文件独立做 MIME 检查。
遇到问题加QQ23979811 协助处理