You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP 7.1更新后CLI环境PDO及pdo_pgsql扩展缺失问题

解决PHP CLI缺失pdo_pgsql扩展的问题

这种情况我之前处理过,核心原因是PHP CLI和FPM属于两个独立的运行环境,它们可能加载不同的php.ini配置文件,ppa源更新时大概率只同步了FPM的配置,没对CLI的配置做相同处理,导致CLI里的扩展启用规则被重置或者没跟上。

下面是一步步的排查和解决方法:

1. 确认PHP版本一致性

首先要确保你用的CLI和FPM是同一个PHP7.1版本,避免多版本PHP共存导致的混淆:

  • 查看CLI版本:php -v
  • 查看FPM版本:php-fpm7.1 -v(如果你的FPM服务名是php7.1-fpm,也可以用service php7.1-fpm status查看版本)

如果版本不一致,说明系统里装了多个PHP版本,需要切换CLI到7.1版本,执行update-alternatives --config php选择对应的7.1选项即可。

2. 对比CLI和FPM的配置文件路径

找到两个环境各自加载的php.ini文件:

  • CLI的配置文件:php --ini,重点看Loaded Configuration File这一行,通常路径是/etc/php/7.1/cli/php.ini
  • FPM的配置文件:php-fpm7.1 -i | grep "Loaded Configuration File",通常路径是/etc/php/7.1/fpm/php.ini

3. 同步扩展启用配置

打开CLI的php.ini文件,对比FPM的php.ini里的扩展部分,找到以下两行(FPM里肯定是启用状态):

extension=pdo_pgsql.so
extension=pgsql.so

如果CLI的php.ini里这两行被注释了(前面有;),就去掉注释;如果没有,就手动添加进去。

另外还要检查扩展目录是否一致:

  • CLI的扩展目录:php -i | grep extension_dir
  • FPM的扩展目录:php-fpm7.1 -i | grep extension_dir
    如果不一致,在CLI的php.ini里设置extension_dir为和FPM相同的路径,比如:
extension_dir = "/usr/lib/php/20160303"

4. 验证扩展是否加载

修改配置后,执行php -m查看已加载的扩展列表,确认pdo_pgsql和pgsql出现在列表里。如果还是没出现,可能需要重新安装对应的扩展包:

sudo apt-get update
sudo apt-get install php7.1-pgsql php7.1-pdo-pgsql

(虽然FPM已经有了,但CLI的扩展包可能在更新时被意外卸载,重装可以确保两个环境都能加载对应扩展)

5. 测试CLI命令

重新执行之前报错的命令,比如Laravel的数据库操作,应该不会再抛出could not find driver的异常了。

补充:ppa源的PHP包通常会把CLI和FPM的配置分开放在/etc/php/7.1/cli/和/etc/php/7.1/fpm/目录下,更新时有时候会用默认配置覆盖CLI的自定义配置,所以以后更新PHP后最好检查下CLI的配置文件是否被重置。

内容的提问来源于stack exchange,提问作者Jan Wytze

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 08:18:25