我有一台 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 驱动程序就会正确加载。
这与服务器无关,并且不特定于任何发行版。