应使用pathinfo()提取扩展名并结合大小校验实现安全上传:先检查$_FILES['file']['error']为0,再用pathinfo($_FILES'file', PATHINFO_EXTENSION)获取小写后缀并比对白名单,同时校验size是否≤预设阈值(如5242880字节),双通过才移动文件。

需要在PHP中判断用户上传文件的类型是否合法、大小是否超标,防止恶意文件上传或大文件占用服务器资源。
获取上传文件的后缀名
使用 pathinfo() 函数提取扩展名,这是最可靠的方式,比用 strrchr() 或正则更安全。
第一步:调用 pathinfo($_FILES['file']['name'], PATHINFO_EXTENSION) 获取原始文件名中的后缀。
注意:不能直接信任客户端提交的 Content-Type,浏览器可伪造;也不能只截取点号后内容——若文件名是 archive.tar.gz,pathinfo 默认返回 gz,但你可能需要 tar.gz,此时应改用 PATHINFO_FILENAME 配合字符串处理。
立即学习“PHP免费学习笔记(深入)”;
这一步操作起来很简单,直接把函数结果赋给变量就行:$ext = pathinfo($_FILES['file']['name'], PATHINFO_EXTENSION);
限制上传文件大小
必须在服务端双重校验:先检查 $_FILES['file']['size'] 是否超过阈值,再确认 PHP 配置是否允许该大小。
方法一:用代码硬性拦截
获取上传文件字节数 → 与预设上限(如 2097152 字节即 2MB)比较 → 超过则 die('文件太大') 或抛出异常。
方法二:依赖 PHP 配置项控制
修改 php.ini 中的 【upload_max_filesize 和 post_max_size】,二者需同时调整,且 post_max_size 必须 ≥ upload_max_filesize,否则表单提交会直接失败,连 $_FILES 都不会生成。
方法三:运行时动态检测配置上限
用 ini_get('upload_max_filesize') 获取当前允许最大值 → 转换为字节(如 '2M' → 2×1024×1024)→ 与实际文件大小比对。
组合校验并拒绝非法上传
第一步:检查 $_FILES['file']['error'] 是否为 0,非 0 表示上传过程已出错(如超 upload_max_filesize),此时无需再查大小或后缀。
第二步:获取后缀并转小写 → 判断是否在白名单数组中(如 ['jpg', 'png', 'pdf'])。
第三步:读取 $_FILES['file']['size'] → 确保 ≤ 允许的最大字节数(例如 5242880 表示 5MB)。
第四步:两项都通过才允许移动文件到目标目录,否则输出错误提示并终止脚本执行。



















