phpinfo()中“Loaded Configuration File”路径才是PHP实际加载的配置文件,宝塔界面显示路径常不准;需据此确认extension=redis.so是否启用、extension_dir是否匹配、PHP-FPM是否重启。

phpinfo() 显示的 Loaded Configuration File 才是真实生效路径
宝塔面板界面上显示的 php.ini 路径经常不准,尤其是当存在多个 PHP 版本或手动改过配置时。真正决定扩展是否加载的,是 phpinfo() 输出里 “Loaded Configuration File” 这一行指向的文件——它可能在 /www/server/php/81/etc/php.ini,也可能在 /www/server/php/81/etc/php-fpm.conf 附带的 include 文件里,甚至被 Scan for additional .ini files in 加载的目录覆盖。
实操建议:
立即学习“PHP免费学习笔记(深入)”;
- 在网站根目录新建
info.php,内容为<?php phpinfo(); ?>,通过浏览器访问它(不是php -iCLI 命令) - 搜索 “Loaded Configuration File”,记下完整路径;如果显示 “none”,说明当前没加载任何主配置文件,得查 FPM 配置里是否漏了
php_admin_value[php_ini] - 再搜 “Scan for additional .ini files in”,看是否有类似
/www/server/php/81/etc/php.d/的目录,那里可能有ext-redis.ini等独立配置,也得一并检查
extension_dir 必须匹配当前 PHP 的 Zend API 编号
extension_dir 不只是个目录路径,它的子目录名(如 no-debug-non-zts-20210902)是 PHP 的 ABI 指纹,由 PHP_API_VERSION 决定。哪怕 redis.so 文件物理存在,只要目录名里的数字和当前 PHP 不一致,extension=redis.so 就会静默失败。
实操建议:
立即学习“PHP免费学习笔记(深入)”;
- 执行
/www/server/php/81/bin/php-config --extension-dir(把 81 换成你实际版本),确认输出的路径是否和phpinfo()里 “extension_dir” 一致 - 用
ls -l /www/server/php/81/lib/php/extensions/查看实际存在的子目录名,比如no-debug-non-zts-20220829;再执行/www/server/php/81/bin/php -r "echo PHP_API_VERSION;",比对数字是否完全相同 - 如果不一致,说明这个
.so文件是为别的 PHP 版本编译的,不能复用,必须重装或重新编译
extension=redis.so 这行必须出现在正确的配置段且未被注释
宝塔有时会把扩展配置写进单独的 .ini 文件(如 ext-redis.ini),但若主 php.ini 没启用 scan_dir 或该文件权限不对,它就根本不会被读取。更常见的是:这行被写在了 ;Dynamic Extensions 注释块之后,但前面缺了空行,导致被上一行注释吞掉。
实操建议:
立即学习“PHP免费学习笔记(深入)”;
- 打开
phpinfo()确认的那个php.ini,搜索extension=,确保只有一行未被注释的extension=redis.so(PHP 7.4+)或extension=redis(极老版本,已淘汰) - 不要写绝对路径,例如
extension=/www/server/php/81/lib/php/extensions/.../redis.so—— 容易因路径拼错或符号链接失效而失败 - 检查这行前后是否有隐藏字符或 UTF-8 BOM,用
vim -b或xxd查看;Windows 编辑器保存的 ini 文件常带 BOM,会导致整行被忽略
重启 PHP-FPM 才算真正重载扩展,重载配置没用
“重载配置”只让 Nginx/Apache 重新读取自己的 conf,PHP-FPM 进程仍拿着旧的模块列表在跑。只有杀掉旧进程、启动新进程,才能让 extension= 生效。这也是为什么你改完 php.ini 后 php -m 看到了 redis,但网页里 phpinfo() 却没有——CLI 和 FPM 加载的是两套环境。
实操建议:
立即学习“PHP免费学习笔记(深入)”;
- 在宝塔面板中:进入「软件商店」→ 找到对应 PHP 版本 → 「设置」→ 「服务」→ 先「停止」再「启动」(等价于
systemctl restart php-fpm-81) - 别只重启 Nginx/Apache,那解决不了扩展加载问题;但如果 PHP-FPM 启动了而 Web 服务器没连上,请求照样 502
- 验证时务必用浏览器访问
info.php,而不是终端命令;同时运行/www/server/php/81/bin/php -m | grep redis对比 CLI 和 FPM 是否一致
phpinfo() 和 php -m 根本不是一回事。



















