pdo_mysql 已安装,但在 phpinfo 中缺失

pdo_mysql 已安装,但在 phpinfo 中缺失

我有一台 CentOs 6.7 服务器。我无法在 apache2 上使 pdo_mysql 可用。命令行显示如下:

myserver$ php -m
PDO, pdo_mysql, pdo_sqlite

但 phpinfo() 仅显示 PDO 和 pdo_sqlite

我已经在 php.ini 中包含了以下内容

extension=pdo_mysql.so
extension=pdo.so

并使用以下命令重新启动 Apache:

sudo service httpd restart

看起来,pdo_mysql 安装在不同的 php 上。当我在服务器上搜索 pdo.so 和 pdo_mysql.so 时,我在三个地方得到了 pdo.so,但在两个地方得到了 pdo_mysql。

myserver$ locate pdo.so
/usr/lib64/php/modules/pdo.so
/usr/lib64/php-zts/modules/pdo.so
/var/opt/remi/php56/root/usr/lib64/php/modules/pdo.so

myserver$ locate pdo_mysql.so
/usr/lib64/php/modules/pdo_mysql.so
/usr/lib64/php-zts/modules/pdo_mysql.so

Apache 安装在 phpinfo() 中显示:

Loaded Configuration File   /opt/remi/php56/root/etc/php.ini 

所以我最近将 php 升级到 php 5.6 时缺少 pdo_mysql。其他 php 安装有它,但我不知道如何强制 pdo_mysql 安装将其安装到 /var/opt/remi/php56/

我使用以下命令安装 pdo-mysql:

yum install pdo-mysql

因此,它将其安装在 下/usr/lib64/php/但不在 下/var/opt/remi/php56/

答案1

看来您对 remi 存储库中的 2 个可用 PHP 堆栈感到困惑。

  • php-* packages = 在 /etc 中配置的基本包
  • php56-php-* 软件包 = 用于并行安装的软件集合,配置在 /opt 中

另请参阅常问问题

Apache 安装在 phpinfo() 中显示:已加载配置文件 /opt/remi/php56/root/etc/php.ini

这意味着你正在使用 SCL 版本。因此你需要 php56-php-mysqlnd

我已经在 php.ini 中包含了以下内容

您永远不必更改 php.ini,每个包都提供了启用扩展的配置文件(并确保正确的加载顺序,例如 pdo“在”pdo_mysql 之前)

我建议你遵循配置向导结果

答案2

您已通过 Remi 存储库安装了 PHP。

尝试这个:

yum --enablerepo=remi,remi-php56 install php-pdo_mysql

这应该可以使您的 PHP 安装保持良好同步。

答案3

如果有人稍后遇到这个问题,还有另一个很容易被忽视的解决方案。

我遇到了与 OP 完全相同的问题,其中 pdo_mysql 无法正确加载并且模块已安装。

和 OP 一样,我先用 pdo_mysql 加载,然后在后面一行使用 pdo。但实际上这样不起作用。

extension=pdo
extension=pdo_mysql

按上述顺序加载扩展。pdo必须先走,然后是任何其他 pdo_* 模块。一旦我更改顺序,然后重新启动 nginx 和 php-fpm,PDO 驱动程序就会正确加载。

这与服务器无关,并且不特定于任何发行版。

相关内容