PHP 7.4 下 MIME 类型解析失败主因是 fileinfo 扩展未启用或 magic 数据库陈旧;需确认扩展加载、手动添加 extension=fileinfo、使用最新 magic.mgc 文件,或改用 dflydev/apache-mime-types 按扩展名查类型。
PHP 7.4 环境下无法解析 MIME 类型,根本原因通常不是 PHP 版本本身,而是扩展未启用、或虽启用但底层 magic 数据库陈旧/损坏。
检查 fileinfo 扩展是否真正加载成功
很多用户在宝塔或 cPanel 中点击“安装 fileinfo”后以为万事大吉,但实际
里搜不到
,或者
返回
。
运行
(命令行)或新建
输出
,确认页面中存在 “fileinfo” 模块区块
若无,说明扩展未生效:宝塔用户需确认是否选对了 PHP 版本(如你用的是 PHP 7.4,就得进“PHP 7.4 设置”而非全局设置)
内存不足(如 1GB 以下)会导致宝塔编译失败,界面显示“安装中”但实际没写入
;此时应手动编辑对应版本的
,添加
并重启 PHP
Linux 下还需确认
或
文件真实存在
magic 数据库过期导致识别不准(如 .docx → application/zip)
和
依赖一个叫 “magic database” 的二进制文件(通常是
或内置在扩展里的默认库)。PHP 7.4 自带的 magic 库可能停留在 2018–2020 年,无法识别新版 Office、WebP、AVIF 等格式。
不要直接改系统级
—— 多数云服务器无权限,且易被系统更新覆盖
推荐做法:下载最新 magic 数据库,指定给
使用:
获取最新 magic:从
https://www.php.cn/link/20ded8fd4bb9c3d915be78cf00c35082
克隆仓库,把
文件(非目录)复制到你的项目路径,比如
注意:该文件是纯文本,但
要求它已由
工具预编译为二进制(
),所以更稳妥的是直接下载编译好的
(见 releases 页面)
用 dflydev/apache-mime-types 替代内容嗅探,仅靠扩展名查 MIME
当你要根据上传前的文件名(如
)预设
,而不是读取文件内容时,
是杀鸡用牛刀,且不可靠。这时候应该放弃 magic,转向权威映射表。
PHP 8.5.5
PHP 8.5.5 是 PHP 8.5 分支的维护更新版本。该版本延续了“小步快跑”的迭代逻辑,通过深度错误修复、底层性能微调以及安全加固,旨在为开发者提供一个更健壮、更高效的运行环境。该版本严格遵守语义化版本规范,不包含破坏性变更。
下载
立即学习
“
PHP免费学习笔记(深入)
”;
执行
使用方式极简:
它直接解析 Apache 官方
,比 PHP 内置映射更全、更新更勤,且不依赖系统环境或扩展状态
适合场景:表单预填
属性、生成下载响应头、前端文件类型提示、上传前校验白名单
注意:它不分析文件内容,所以不能替代
做安全校验;生产环境仍需服务端用
+ 文件头双重验证
真正容易被忽略的是:**
的准确率高度依赖 magic 数据库的时效性,而这个数据库不会随 PHP 升级自动更新**。很多人升级到 PHP 7.4 后发现 .webp 识别成
,第一反应是“PHP 有问题”,其实只是手里的 magic 还停留在 WebP 发布前的年代。别只盯着
php
.ini,先去 GitHub 把
换新。
php_fileinfophpinfo()fileinfoextension_loaded('fileinfo')falsephp -m | grep fileinfoinfo.phpphpinfo()php.iniphp.iniextension=fileinfo/usr/lib/php/*/fileinfo.so/www/server/php/74/lib/php/extensions/no-debug-non-zts-*/fileinfo.sofinfo_open()mime_content_type()/usr/share/misc/magic/usr/share/misc/magicfinfo_open()$finfo = finfo_open(FILEINFO_MIME_TYPE, '/path/to/latest.magic');magic./data/magicfinfo_open()filefile -C -m magicmagic.mgcreport.xlsxContent-Typefinfocomposer require dflydev/apache-mime-types$mimeTypes = new \Dflydev\ApacheMimeTypes\PhpRepository();
echo $mimeTypes->findType('xlsx'); // application/vnd.openxmlformats-officedocument.spreadsheetml.sheetmime.typesacceptfinfofinfofinfoapplication/octet-streammagic.mgc