第28章 PHP 多文件上传 + 上传安全防护
一、多文件上传前端表单
方式1:数组name写法
html
多文件上传
加 multiple 可多选文件。
二、PHP 接收多文件原理
多文件上传后, $_FILES 内部会变成二维数组:
name、type、tmp_name、size、error 都是数组格式。
三、多文件上传完整代码
php
// 允许后缀
$allowExt = ['jpg','png','gif','jpeg'];
$maxSize = 210241024;
$savePath = './upload/';
!is_dir($savePath) && mkdir($savePath,0777,true);
// 获取上传文件数组
$files = $_FILES['upfile'];
$count = count($files['name']);
for($i=0;$i $maxSize){
echo "{$name} 超出2M";
continue;
}
// 生成唯一文件名
$newName = time().rand(1000,9999).'.'.$ext;
$dest = $savePath.$newName;
if(move_uploaded_file($tmp,$dest)){
echo "{$name} 上传成功 → {$newName}";
}else{
echo "{$name} 上传失败";
}
}
四、文件上传安全漏洞
1. 绕过后缀:伪装 xxx.php.jpg
2. 恶意脚本:上传 php、asp 后门文件
3. 覆盖文件:同名文件直接覆盖
4. 超大文件:占用服务器磁盘、拖垮服务
五、安全防护方案
1. 严格限制允许后缀,禁止 php、html、exe 等
2. 重命名保存,不使用原文件名
3. 存放目录禁止访问执行权限
4. 二次MIME类型校验
php
// 获取真实文件类型
$finfo = new finfo(FILEINFO_MIME_TYPE);
$mime = $finfo->file($tmp);
5. 限制上传文件大小
6. 上传目录独立隔离,不放在网站可执行目录
六、上传常用封装思路
- 单独写上传函数,传入允许类型、大小、保存路径
- 统一返回状态、新文件名、保存地址
- 单文件、多文件共用一套逻辑
七、本章核心总结
1. 多文件前端用 name="upfile[]" 加 multiple
2. PHP 循环遍历 $_FILES 数组逐个处理
3. 上传必须做后缀+大小+MIME三重校验
4. 强制重命名,防止覆盖和路径漏洞
5. 安全第一,严禁直接保存原文件名和原后缀

请登录后发表评论
注册
停留在世界边缘,与之惜别