PHP如何判断文件是否为视频_PHP视频文件检测法【类型】-php教程

最可靠方法是用 finfo_file() 读取临时文件二进制签名判断 MIME 类型,需启用 fileinfo 扩展、传入 $_FILES[‘file’][‘tmp_name’] 并用 FILEINFO_MIME_TYPE 标志,再通过 str_starts_with($mimeType, ‘video/’) 判断是否为视频。

用 finfo_file() 检测真实 MIME 类型最可靠

仅靠文件扩展名(如 .mp4)或 $_FILES['file']['type'] 判断视频类型完全不可信——前者可被手动修改,后者由浏览器提供,极易伪造。真正有效的做法是读取文件头部的二进制签名(magic bytes),用 PHP 的 finfo_file() 函数解析实际 MIME 类型。

实操要点:

  • 必须启用 fileinfo 扩展(PHP 默认已开启,可通过 extension_loaded('fileinfo') 验证)
  • 推荐使用 FILEINFO_MIME_TYPE 标志,返回类似 video/mp4、video/webm 的字符串,比 FILEINFO_MIME 更简洁
  • 务必传入临时文件完整路径($_FILES['file']['tmp_name']),不能传扩展名或 URL
$finfo = finfo_open(FILEINFO_MIME_TYPE);
$mimeType = finfo_file($finfo, $_FILES['file']['tmp_name']);
finfo_close($finfo);

if (str_starts_with($mimeType, 'video/')) {
    // 是视频
}

常见视频 MIME 类型有哪些?别只认 video/mp4

不同封装格式对应不同 MIME 类型,硬编码匹配 'video/mp4' 会漏掉大量合法视频。实际需覆盖主流类型:

  • video/mp4(H.264/AAC 封装)
  • video/quicktime(.mov,注意不是 video/mp4)
  • video/x-ms-wmv(.wmv)
  • video/x-flv(.flv)
  • video/webm(VP8/VP9 + Vorbis/Opus)
  • video/x-matroska(.mkv)
  • video/3gpp(.3gp)

建议用前缀匹配(str_starts_with($mimeType, 'video/'))而非穷举,既覆盖新增类型,又避免误判(如 video/vnd.dece.mp4 这类变体)。

立即学习“PHP免费学习笔记(深入)”;

getimagesize() 为什么不能用于视频检测?

getimagesize() 只支持图像格式(JPEG/PNG/GIF 等),对任何视频文件都会返回 false 或警告。有人误以为它能“读取尺寸”就等于能识别视频,这是典型误解。

夏夕资源网专注于CMS网站模板,主流语言整站网站源码下载,网站建设相关教程分享,好用的软件素材整合下载,提供一站式便捷自助服务。
1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需!
7. 如遇到加密压缩包,默认解压密码为"zy.lucklyus.top",如遇到无法解压的请联系管理员!
夏夕资源网-网站模板_免费源码_资源素材 » PHP如何判断文件是否为视频_PHP视频文件检测法【类型】-php教程
在线时间:12:00 - 22:00
关注微信公众号:微信公众号
站长邮箱:[email protected]
  • 运营天数: 1393+
  • 资源总数: 47989+
  • 用户总数: 1+
  • 今日更新: 0+
  • 访问次数: 4030070+
  • 本周更新: 0+
  • 最后更新: 2026-03-16

本站指数

×
  • 运营天数: 1393+
  • 资源总数: 47989+
  • 用户总数: 1+
  • 今日更新: 0+
  • 访问次数: 4030070+
  • 本周更新: 0+
  • 最后更新: 2026-03-16