在 Ubuntu 上 PHP-FPM 无法加载模块(extension) 是很常见的问题,通常不是“模块不存在”,而是加载路径、PHP 版本或配置位置不对。下面按最常见原因逐一说明。
Ubuntu 上一个系统可能装多个 PHP 版本:
ls /etc/php/
# 例如:7.4 8.1 8.2
你必须确认:
查看当前 PHP 版本:
php -v
或
php-fpm -v
PHP-FPM 的模块配置通常在:
/etc/php/{版本}/fpm/conf.d/
例如:
/etc/php/8.1/fpm/conf.d/10-mysqlnd.ini
而 CLI 的是:
/etc/php/{版本}/cli/conf.d/
⚠️ fpm 和 cli 是两套配置,互不影响
php -m
php -m | grep redis
如果没有,需要安装:
sudo apt install php-redis
# 或指定版本
sudo apt install php8.1-redis
编辑:
/etc/php/{版本}/fpm/php.ini
或
/etc/php/{版本}/fpm/conf.d/*.ini
确保有:
extension=redis.so
⚠️ 注意:
.so 文件名必须存在php -i | grep extension_dir
例如:
extension_dir => /usr/lib/php/20210902
查看是否有该文件:
ls /usr/lib/php/20210902/redis.so
不存在 → 模块没装好
sudo systemctl restart php8.1-fpm
⚠️ 只重启 nginx 没用
tail -f /var/log/php{版本}-fpm.log
或:
journalctl -u php8.1-fpm
常见错误:
Unable to load dynamic libraryundefined symbolAPI differs✅ 解决:装对应版本 phpX.X-模块名
✅ 解决:改的是 fpm/conf.d 不是 cli
✅ 解决:模块和 PHP 主版本必须一致
✅ 解决:
php-fpm -i | grep php.ini
如果你愿意,可以告诉我:
我可以直接帮你定位到具体哪一行配置有问题。