«

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/扩展名校验(同单文件)。

常见坑

  1. input name 写成 files(不带 []),多文件只收到最后一个。
  2. 误以为 $_FILES 结构和单文件一样,索引方式搞错。
  3. 循环内不判 error,上传失败的空临时文件被移动。
  4. 总大小受 post_max_size 限制,超出整个 $_FILES 为空。
  5. 未逐个重命名,同名文件互相覆盖。
  6. 目录无写权限,move_uploaded_file 失败。
  7. 多文件总数和单文件大小上限要分别配置 php.ini。

总结

多文件用 name="files[]" multiple,$_FILES 按下标成数组,循环里逐个取 tmp_name/error/size,判错误、重命名、移动。注意 post_max_size、单文件校验和数量限制,每个文件独立做 MIME 检查。

遇到问题加QQ23979811 协助处理

标签: PHP 数组 多文件上传 循环