第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. 安全第一,严禁直接保存原文件名和原后缀
【瓜分奖池】PHP基础第二十八章 第5张插图