PHP 8.6 尚未发布,当前最新稳定版为 PHP 8.3,PHP 8.4 已于2024年11月发布,8.5 正在开发中;启用 fileinfo 扩展需修改 Loaded Configuration File 对应的 php.ini,取消 extension=fileinfo 前的分号,并通过 php -m、phpinfo() 或 extension_loaded() 验证,再用 finfo_open() 安全检测 MIME 类型。

PHP 8.6 尚未发布,目前(截至2026年8月)官方最新稳定版是 PHP 8.3,PHP 8.4 已于2024年11月发布,PHP 8.5 处于活跃开发中,但无 PHP 8.6 的正式版本或发布计划。因此,“PHP 8.6 启用 fileinfo”实际应理解为:在你当前使用的较新 PHP 版本(如 8.2 / 8.3 / 8.4)中正确启用 fileinfo 扩展,以支持基于文件头的真实类型检测。
确认 PHP 实际版本与配置路径
运行以下命令查看真实版本和加载的 php.ini:
php --ini
输出中重点关注 Loaded Configuration File 路径。PHPStudy、XAMPP、WAMP 或 Homebrew 安装的环境,该路径各不相同,务必修改的是这一份配置文件,而非 CLI 默认路径或其他 .ini。
立即学习“PHP免费学习笔记(深入)”;
启用 fileinfo 扩展模块
打开上述 php.ini 文件,搜索 fileinfo。你会看到类似行:
;extension=fileinfo
删除开头的分号,保存为:
extension=fileinfo
注意:PHP 8.0+ 统一使用 extension=fileinfo,不再区分 .dll 或 .so;旧写法 extension=php_fileinfo.dll 在 PHP 8.0+ 中已弃用,不建议使用。
验证扩展是否加载成功
重启 Web 服务(Apache/Nginx)和 PHP 进程(如 PHP-FPM),然后执行:
-
php -m | grep fileinfo —— 终端中看到
fileinfo即表示 CLI 环境已启用 - 新建
info.php,内容为<?php phpinfo(); ?>,浏览器访问,搜索 fileinfo —— 出现在已启用扩展列表中即表示 Web 环境生效 - 代码级验证:
<?php var_dump(extension_loaded('fileinfo'));应返回bool(true)
安全识别文件类型的正确用法
启用后,用 finfo_open() 获取真实 MIME 类型,避免依赖 $_FILES['xxx']['type'] 或后缀名:
$finfo = finfo_open(FILEINFO_MIME_TYPE);
$mime = finfo_file($finfo, $_FILES['file']['tmp_name']);
finfo_close($finfo);
典型安全白名单示例:
-
image/jpeg、image/png、image/gif(图片) -
application/pdf(PDF) -
text/plain(纯文本)
切勿用 strpos($mime, 'image/') 模糊匹配,防止 image/svg+xml 等高危类型绕过。



















