温馨提示×

ubuntu php-fpm为何无法加载模块

小樊
55
2026-09-01 11:38:36
栏目: 编程语言

在 Ubuntu 上 PHP-FPM 无法加载模块(extension) 是很常见的问题,通常不是“模块不存在”,而是加载路径、PHP 版本或配置位置不对。下面按最常见原因逐一说明。


一、确认你改的是「正确的 php-fpm 配置」

Ubuntu 上一个系统可能装多个 PHP 版本

ls /etc/php/
# 例如:7.4  8.1  8.2

你必须确认:

  • Web 用的是哪个 PHP 版本
  • 你改的是不是同一个版本的配置

查看当前 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 是两套配置,互不影响


三、确认模块是否已安装

1️⃣ 查看可用模块

php -m

2️⃣ 查看某个模块是否安装(如 redis)

php -m | grep redis

如果没有,需要安装:

sudo apt install php-redis
# 或指定版本
sudo apt install php8.1-redis

四、检查 extension 是否正确启用

编辑:

/etc/php/{版本}/fpm/php.ini

/etc/php/{版本}/fpm/conf.d/*.ini

确保有:

extension=redis.so

⚠️ 注意:

  • .so 文件名必须存在
  • Ubuntu 通常不需要写完整路径

五、确认模块文件真实存在

php -i | grep extension_dir

例如:

extension_dir => /usr/lib/php/20210902

查看是否有该文件:

ls /usr/lib/php/20210902/redis.so

不存在 → 模块没装好


六、重启 PHP-FPM(不重启不生效)

sudo systemctl restart php8.1-fpm

⚠️ 只重启 nginx 没用


七、查看 PHP-FPM 错误日志(最关键)

tail -f /var/log/php{版本}-fpm.log

或:

journalctl -u php8.1-fpm

常见错误:

  • Unable to load dynamic library
  • undefined symbol
  • API differs

八、典型问题汇总

❌ 问题 1:装了模块但 fpm 没加载

✅ 解决:装对应版本 phpX.X-模块名

❌ 问题 2:CLI 有,FPM 没有

✅ 解决:改的是 fpm/conf.d 不是 cli

❌ 问题 3:版本不匹配

✅ 解决:模块和 PHP 主版本必须一致

❌ 问题 4:用了错误的 php.ini

✅ 解决:

php-fpm -i | grep php.ini

九、快速自检清单 ✅

  • [ ] 确认 PHP-FPM 版本
  • [ ] 模块已 apt 安装
  • [ ] 修改的是 fpm 配置
  • [ ] 重启 php-fpm
  • [ ] 查看 fpm 日志

如果你愿意,可以告诉我:

  • Ubuntu 版本
  • PHP 版本
  • 具体哪个模块加载不了

我可以直接帮你定位到具体哪一行配置有问题

0