如何通过phpEnv启用Fileinfo模块?
- 内容介绍
- 文章标签
- 相关推荐
本文共计777个文字,预计阅读时间需要4分钟。
phpEnv 是一款Windows下的PHP多版本环境切换工具,它本身不包含图形化扩展管理界面。其主要功能是管理和切换PHP的不同版本环境,所有扩展都需要手动配置。如果你在phpEnv界面中找不到fileinfo扩展的安装按钮,这不是bug,而是设计如此——phpEnv不负责编译或安装扩展,它只负责调用已配置在系统中的php.ini和php.exe。
确认 php_fileinfo.dll 是否存在且路径正确
Windows 下 fileinfo 以 php_fileinfo.dll 形式存在,不是 fileinfo.so。常见错误是直接照搬 Linux 教程写 extension=fileinfo.so,这在 phpEnv 下必然失败。
- 进入你的 phpEnv 当前激活的 PHP 版本目录,例如
C:\phpenv\versions\8.2.12\ - 检查
ext\php_fileinfo.dll文件是否存在(不是fileinfo.dll,也不是php_fileinfo.so) - 打开
php.ini,确认extension_dir指向的是ext目录,例如:extension_dir = "C:\phpenv\versions\8.2.12\ext" - 搜索
extension=php_fileinfo.dll,去掉前面的分号;如果整行不存在,就手动添加这一行(必须严格匹配文件名)
修改了 php.ini 却 still 报 “Class 'finfo' not found”
phpEnv 启动 CLI 和 Web(如 Apache/Nginx)时可能加载不同 php.ini:CLI 用的是 php.ini,而 Web 服务往往读取 php.ini-development 或 php.ini-production,甚至被覆盖为其他路径。
- 运行
php --ini查看 CLI 加载的配置文件路径 - 在 Web 环境中新建一个
info.php,内容为<?php phpinfo(); ?>,访问后搜索 “Loaded Configuration File”,确认实际生效的是哪个 ini - 两个环境都要单独处理:CLI 的
php.ini和 Web 对应的php.ini都得加上extension=php_fileinfo.dll - 改完任一配置后,必须重启对应服务:CLI 不需重启,但 Web 服务(Apache/Nginx + PHP-FPM)必须完全停止再启动
验证是否真正生效,别只信 php -m
php -m | findstr fileinfo 只能说明 CLI 环境加载成功,不代表 Web 请求可用。很多用户卡在这一步,以为搞定了,结果 Composer install 还是报错或 Laravel 启动失败。
立即学习“PHP免费学习笔记(深入)”;
- 在 CLI 下执行:
php -r "var_dump(extension_loaded('fileinfo'));",输出bool(true)才算 CLI 有效 - 在 Web 页面中执行:
<?php echo extension_loaded('fileinfo') ? 'OK' : 'FAIL'; ?>,必须看到 OK - 终极验证:运行
php -r "$f = finfo_open(FILEINFO_MIME_TYPE); echo $f ? 'finfo works' : 'still broken';",只有这个不报错才算扩展函数真正可调用
最常被忽略的是 Web 环境和 CLI 环境的配置分离,以及 php_fileinfo.dll 文件名大小写或拼写错误——Windows 虽不区分路径大小写,但扩展名必须一字不差。
本文共计777个文字,预计阅读时间需要4分钟。
phpEnv 是一款Windows下的PHP多版本环境切换工具,它本身不包含图形化扩展管理界面。其主要功能是管理和切换PHP的不同版本环境,所有扩展都需要手动配置。如果你在phpEnv界面中找不到fileinfo扩展的安装按钮,这不是bug,而是设计如此——phpEnv不负责编译或安装扩展,它只负责调用已配置在系统中的php.ini和php.exe。
确认 php_fileinfo.dll 是否存在且路径正确
Windows 下 fileinfo 以 php_fileinfo.dll 形式存在,不是 fileinfo.so。常见错误是直接照搬 Linux 教程写 extension=fileinfo.so,这在 phpEnv 下必然失败。
- 进入你的 phpEnv 当前激活的 PHP 版本目录,例如
C:\phpenv\versions\8.2.12\ - 检查
ext\php_fileinfo.dll文件是否存在(不是fileinfo.dll,也不是php_fileinfo.so) - 打开
php.ini,确认extension_dir指向的是ext目录,例如:extension_dir = "C:\phpenv\versions\8.2.12\ext" - 搜索
extension=php_fileinfo.dll,去掉前面的分号;如果整行不存在,就手动添加这一行(必须严格匹配文件名)
修改了 php.ini 却 still 报 “Class 'finfo' not found”
phpEnv 启动 CLI 和 Web(如 Apache/Nginx)时可能加载不同 php.ini:CLI 用的是 php.ini,而 Web 服务往往读取 php.ini-development 或 php.ini-production,甚至被覆盖为其他路径。
- 运行
php --ini查看 CLI 加载的配置文件路径 - 在 Web 环境中新建一个
info.php,内容为<?php phpinfo(); ?>,访问后搜索 “Loaded Configuration File”,确认实际生效的是哪个 ini - 两个环境都要单独处理:CLI 的
php.ini和 Web 对应的php.ini都得加上extension=php_fileinfo.dll - 改完任一配置后,必须重启对应服务:CLI 不需重启,但 Web 服务(Apache/Nginx + PHP-FPM)必须完全停止再启动
验证是否真正生效,别只信 php -m
php -m | findstr fileinfo 只能说明 CLI 环境加载成功,不代表 Web 请求可用。很多用户卡在这一步,以为搞定了,结果 Composer install 还是报错或 Laravel 启动失败。
立即学习“PHP免费学习笔记(深入)”;
- 在 CLI 下执行:
php -r "var_dump(extension_loaded('fileinfo'));",输出bool(true)才算 CLI 有效 - 在 Web 页面中执行:
<?php echo extension_loaded('fileinfo') ? 'OK' : 'FAIL'; ?>,必须看到 OK - 终极验证:运行
php -r "$f = finfo_open(FILEINFO_MIME_TYPE); echo $f ? 'finfo works' : 'still broken';",只有这个不报错才算扩展函数真正可调用
最常被忽略的是 Web 环境和 CLI 环境的配置分离,以及 php_fileinfo.dll 文件名大小写或拼写错误——Windows 虽不区分路径大小写,但扩展名必须一字不差。

