php多图上传需前端用multiple属性和name="images[]"命名,后端按$_files['images']二维数组结构遍历处理,逐项校验error、重命名、用move_uploaded_file安全保存。

PHP 中正确上传多张图片,关键不是“加什么标签”,而是前端表单要支持多文件选择 + 后端 PHP 要正确处理 $_FILES 数组结构。很多人卡在后端解析失败,其实是没理解多图上传时 $_FILES 的数组形态。
前端:用 multiple 和 [] 命名约定
表单必须满足两个条件:
- input type="file" 添加 multiple 属性,允许选多个文件;
- name 属性末尾加 方括号 [](如
name="images[]"),否则 PHP 只接收最后一个文件。
示例 HTML:
后端:按 PHP 多文件上传的数组结构遍历
当使用 name="images[]" 时,$_FILES['images'] 是一个**二维关联数组**,结构类似:
'name' => Array([0] => a.jpg, [1] => b.png),
'type' => Array(...),
'tmp_name' => Array(...),
'error' => Array(...),
'size' => Array(...)
)
不能直接写 $_FILES['images']['tmp_name'] —— 这是错的。必须用循环按索引提取每组值:
- 先检查
$_FILES['images']['error'][0]是否为 0(UPLOAD_ERR_OK); - 用
count($_FILES['images']['name'])获取上传数量; - 对每个下标
$i,安全组合:$_FILES['images']['tmp_name'][$i]、$_FILES['images']['name'][$i]等。
安全与实用建议
- 务必校验
$_FILES['images']['error'][$i],跳过值非 0 的项(如超大小、上传中断); - 用
getimagesize()或finfo_file()验证真实 MIME 类型,别信$_FILES['type']; - 重命名文件(如用
uniqid() . '.' . pathinfo($name, PATHINFO_EXTENSION)),避免中文或特殊字符问题; - 移动文件用
move_uploaded_file($tmp, $dst),不可用copy()或直接rename()。
常见错误提醒
- 漏写
enctype="multipart/form-data"→ 表单数据不包含文件; - name 写成
name="images"(无 [])→ 只能拿到最后一张; - 用
$_FILES['images']['tmp_name']当字符串处理 → 实际是数组,会警告并失败; - 没检查
is_uploaded_file()就直接 move → 存在安全风险。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











