PHP怎样判断文件是否为音频_PHP音频文件识别法【类型】-php教程

最可靠方式是用 finfo_file() 基于二进制头识别音频 MIME 类型,因其依赖 libmagic 解析内容而非扩展名或浏览器伪造的 type 字段;处理内存数据时应改用 finfo_buffer()。

用 finfo_file() 判断音频 MIME 类型最可靠

仅靠文件扩展名(如 .mp3)判断音频类型极易被绕过,真实场景中必须检查文件内容。PHP 的 finfo_file() 基于 libmagic,能解析二进制头信息,是识别音频类型的首选方式。

常见错误是直接用 mime_content_type() —— 它已被弃用,且在某些 PHP 版本中不可用;还有人用 getimagesize() 试图“碰运气”,但它只支持图片,对音频返回 false 或警告。

正确做法:

  • 始终使用 finfo_open(FILEINFO_MIME_TYPE) 初始化资源
  • 调用 finfo_file() 传入文件路径,不依赖 $_FILES 临时路径以外的变量
  • 检查返回值是否为已知音频 MIME 类型,例如 "audio/mpeg"、"audio/wav"、"audio/ogg"、"audio/flac"
  • 注意:部分 Web 服务器会把 .m4a 识别为 "audio/mp4" 或 "video/mp4",需一并接受

为什么 pathinfo($file, PATHINFO_EXTENSION) 不足以判定音频

扩展名只是字符串,可被任意修改。攻击者上传伪造后缀的恶意脚本(如 shell.mp3 实际是 PHP 文件),仅校验扩展名会完全失效。

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

典型误用场景:

  • 用 in_array(pathinfo($file, PATHINFO_EXTENSION), ['mp3', 'wav', 'ogg']) 放行文件
  • 未配合 MIME 检查就直接 move_uploaded_file()
  • 把 $_FILES['audio']['type'] 当作可信来源(浏览器可随意伪造该字段)

扩展名只能作为辅助提示,不能参与安全决策。

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

本站指数

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