先确认“loaded configuration file”路径,再区分cli与web环境配置差异;检查extension_dir是否正确、依赖库是否缺失、zts/版本是否匹配、权限及selinux限制,并确保已重启对应服务。

phpinfo() 里看不到扩展,先盯住 “Loaded Configuration File” 行
这不是配置没写,而是 PHP 根本没读你改的那个 php.ini。用 php --ini 查 CLI 环境,用 phpinfo() 页面看 Web 环境——两者路径经常不一致。Loaded Configuration File 显示为空?说明 PHP 没加载任何 ini,可能文件名错了(比如 php.ini-development 末尾带空格)、权限为 600、或被 PHPIniDir 指向了别的位置。
extension=redis.so 写对了,但 php -m 也不显示
常见陷阱有三个:
-
extension_dir路径错误:比如指向了/usr/lib/php/8.1/extensions/,但实际.so在/usr/lib/php/8.2/extensions/;用php -i | grep extension_dir确认真实路径 - 扩展依赖缺失:运行
ldd /path/to/redis.so,如果出现not found的库(如libicu、libsodium),得先装系统包(apt install libicu-dev) - ABI 不兼容:手动编译的扩展必须和当前 PHP 的 ZTS(线程安全)模式、Zend API 版本严格匹配;用
php -v和php-config --version对照,不一致就重编
Web 环境下扩展加载失败,但 CLI 下正常
这几乎一定是环境隔离导致的:
- Apache 用户(如
www-data)无法读取.so文件:检查ls -l /path/to/redis.so,确保组/其他用户有读权限(至少644) - PHP-FPM 配置覆盖了
php.ini:检查www.conf里有没有php_admin_value[extension]或php_admin_flag[extension]把扩展关掉了 - SELinux 或 AppArmor 拦截:临时禁用测试(
setenforce 0),确认后加对应策略 - 没重启服务:Apache 改完要
sudo systemctl restart apache2,PHP-FPM 要sudo systemctl restart php8.2-fpm,光刷新页面毫无作用
Windows 上 phpinfo() 不显示 fileinfo 扩展
Windows 下最容易卡在三处:
- 扩展名写成
extension=php_fileinfo.dll,但实际文件是php_fileinfo.dll—— 注意不是fileinfo.dll,也不是php_fileinfo(缺后缀) -
extension_dir是相对路径,而 Windows 下工作目录不确定;建议写绝对路径:extension_dir = "C:\php\ext" - TS/NTS 模式错配:PHP 是 TS 版(Apache 模块),却用了 NTS 的 DLL;查
php -i | grep "Thread Safety",结果为enabled就必须用 TS 版扩展
Loaded Configuration File 是否真实生效、没区分 CLI/Web 环境、没检查 extension_dir 是否真包含那个 .so 或 .dll 文件。这些点漏一个,重装十遍也没用。php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











