PHP扩展不生效主因是未重启PHP-FPM且改错php.ini路径;需通过phpinfo()确认Web端实际加载的配置文件路径,修改后必须重启对应版本PHP-FPM进程而非仅重载Web服务器配置。

宝塔装完 PHP 扩展不生效,90% 是因为没重启 PHP-FPM 进程,且改错了 php.ini 路径。 你看到“安装成功”提示、也点了“重载配置”,但 phpinfo() 里搜不到扩展名——这不是面板 bug,是 PHP 运行机制决定的:FPM 子进程不重启,就不会重新读取 extension= 行,更不会加载新的 .so 文件。
确认 PHP-FPM 实际加载的 php.ini 路径
宝塔界面显示的“配置文件”路径,和网页请求实际读的 php.ini 很可能不是同一个。CLI(命令行)和 FPM(Web)用的是两套配置:
- 在网站根目录建一个
info.php,内容为<?php phpinfo(); ?>,浏览器访问后搜索Loaded Configuration File—— 这个路径才是你要改的 - 常见真实路径是
/www/server/php/82/etc/php.ini(82 表示 PHP 8.2),而不是宝塔“PHP 设置”页里显示的 /etc/php.ini 或其他 - 别信
php --ini输出,它只反映 CLI 环境;php -i | grep "Loaded Configuration File"也一样,和网页无关
extension=redis.so 这行必须写对位置且无拼写错误
扩展名、文件名、路径三者必须严格一致,大小写敏感,不能多空格或分号:
- 先查
.so文件是否存在:ls -l /www/server/php/82/lib/php/extensions/no-debug-non-zts-20210902/redis.so(版本号目录名随 PHP 主版本变,如 20190902 对应 PHP 7.4) - 如果存在,直接写
extension=redis.so即可(宝塔默认extension_dir已设好,不建议写绝对路径) - 如果写成
extension=/www/.../redis.so,而extension_dir又被手动改过,反而会导致加载失败 - 检查有没有重复的
extension=行(比如旧版残留),或被;extension=注释掉了
改完 php.ini 后必须重启 PHP-FPM,不是“重载配置”
宝塔面板点“重载配置”只触发 Nginx/Apache 配置重读,完全不影响 PHP-FPM 进程本身:
立即学习“PHP免费学习笔记(深入)”;
- 正确操作:进「软件商店」→「PHP 管理」→ 找到对应版本(如 PHP-8.2)→ 点击「停止」再「启动」,或直接点「重启」
- 命令行等效操作:
service php82-fpm restart(服务名以宝塔实际命名为准,可用systemctl list-units | grep php查) - 重启后务必验证:
php -r "var_dump(extension_loaded('redis'));"(CLI 下)和phpinfo()(Web 下)都要看,两者结果可能不同 - 如果仍不生效,检查
.so文件权限:ls -l /www/server/php/82/lib/php/extensions/...应为-rw-r--r-- 1 root root,非 root 用户运行的 PHP Worker 读不了 600 权限的文件
ABI 不兼容导致扩展根本无法加载
PHP 主版本升级(如从 7.4 到 8.2)后,不能复用旧版编译的 .so 文件:
- 看到
/www/server/php/74/lib/php/extensions/.../redis.so,就想拷到 82 目录下——会直接导致 PHP-FPM 启动失败或 502 - 每个 PHP 版本必须单独安装对应扩展:在宝塔「PHP 管理」里选中目标版本,再点「安装扩展」,不能跨版本复用
- 报错日志里出现
undefined symbol或Segmentation fault,基本就是 ABI 不匹配
最容易被忽略的点是:你以为自己在改 FPM 的配置,其实编辑的是 CLI 的 php.ini;你以为重启了 Web 服务就等于 PHP 生效了,其实 PHP-FPM 还在用老内存镜像跑。动手前先看 phpinfo() 的 Loaded Configuration File,改完立刻重启对应版本的 PHP-FPM 进程,别省这一步。



















