php 7.3 的 fileinfo 扩展默认未编译或未启用,需先确认其是否存在(如检查 extension_dir 下有无 fileinfo.so)、是否被正确加载(php -m | grep fileinfo)、是否在 php.ini 正确路径中启用并重启服务,否则仅修改配置无效。

PHP 7.3 的 fileinfo 扩展默认不启用,甚至可能根本没编译进二进制文件 —— 不能只改 php.ini 就完事,必须先确认模块是否存在、是否被加载、是否在正确环境生效。
怎么确认 fileinfo 真的没加载(不是错觉)
别信“我加了 extension=fileinfo.so”这种说法,直接验证:
- 运行
php -m | grep fileinfo:无输出 = CLI 环境未加载 - 运行
php --ini,看Loaded Configuration File路径,确保你改的是这个文件 - 检查扩展目录是否存在
fileinfo.so:ls -l $(php -r "echo ini_get('extension_dir');")/fileinfo.so - 写个测试脚本:
<?php var_dump(finfo_open()); ?>,返回false或报错Class 'finfo' not found才是真实失败信号
为什么改了 php.ini 还是不生效(常见死循环)
根本原因往往不在配置,而在 PHP 本身:
-
phpenv install 7.3.12默认不带--enable-fileinfo,尤其 macOS 或旧版php-build脚本 - 宝塔面板里点“安装 fileinfo”失败?说明当前 PHP 是预编译二进制包,
fileinfo根本没编进去 —— 图形界面装不了不存在的东西 - 用
pecl install fileinfo?会失败,因为该扩展自 PHP 5.3 起已内置,PECL 包早已废弃 - 改了
php.ini但没重启服务:CLI 下要phpenv rehash+ 新开终端;Web 下必须重启php-fpm或 Web 服务器(nginx/apache)
Linux/macOS 下真正能走通的操作路径
分两种情况,选对路子再动手:
-
情况一:源码编译安装(推荐,可控)
重装 PHP 时显式加参数:CONFIGURE_OPTS="--enable-fileinfo" phpenv install 7.3.12;或手动编译:cd /path/to/php-7.3.12/ext/fileinfo && phpize && ./configure --with-php-config=/path/to/bin/php-config && make && make install -
情况二:已有 PHP 二进制但缺模块文件
先确认fileinfo.so是否在extension_dir下;若没有,只能换版本(如宝塔中切换为“完整版 PHP 7.3”)或重装源码版;若有,就往php.ini加extension=fileinfo.so,然后重启对应服务
Windows 下最简操作(别绕弯)
关键不是“怎么加”,而是“加给谁”:
- 运行
php --ini,记下Loaded Configuration File路径(注意:CLI 和 Web 可能不同) - 打开该
php.ini,搜索php_fileinfo.dll;若存在且被注释,删掉前面的;;若不存在,手动加一行:extension=php_fileinfo.dll - 确认
extension_dir指向正确的ext目录,比如:extension_dir="C:\php\ext" - 重启 Apache/Nginx + PHP-FPM(或整个 WAMP/XAMPP 服务),仅重启浏览器没用
最麻烦的从来不是加那行配置,而是你手上的 php 二进制文件,压根没把 fileinfo 编进去 —— 这步没法跳过,也没法靠改配置补救。验证时务必用 finfo_open() 调用结果说话,不是 php -m 显示了就等于能用。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











