带有 PHP 选择器的 cPanel 显示 WordPress 错误 "PHP installation appears to be missing the MySQL extension which is required by WordPress"

cPanel with PHP selector shows WordPress Error "PHP installation appears to be missing the MySQL extension which is required by WordPress"

升级 MySQL 以使用 MariaDB 10 后,我的 CloudLinux cPanel 服务器上的多个站点只是白屏 Error: Your PHP installation appears to be missing the MySQL extension which is required by WordPress

我可以为每个帐户选择 PHP 版本,但从 5.3 到 5.6 中选择任何版本仍然无效。

没有任何工作,使用 /scripts/easyapache/ 重建 Apache 和 PHP 没有工作,失败站点上的 运行 <?php echo phpinfo(); ?> 显示没有 mysqlmysqli 扩展。

如何解决这个问题?

如果您在您的 cPanel 服务器上 运行 宁 MySQL/MariaDB,这可能不需要大重建或重新安装 PHP/MySQL - 如果您 运行 这很有可能宁 64 位 CloudLinux.

它可能只是破坏了模块的符号链接。

如果您登录 WHM 并搜索 "MariaDB",您可能会找到一个选项 "MySQL/MariaDB Upgrade" - 这意味着您正在使用它。或者,您可以询问您的主机 MySQL/MariaDB 是否是数据库管理系统。

如果您正在 使用 MariaDB,升级可能会破坏指向 mysql.somysqli.sopdo_mysql.so 的符号链接。

仅当您通过命令行获得 root 访问权限并且知道您在做什么时才尝试以下操作 - 否则请您的主机执行此操作。

在损坏站点的根目录中创建一个名为 info.php 的文件,代码如下:

<?php 
    $inipath = php_ini_loaded_file();

    if ($inipath)
    {
        echo 'Loaded php.ini: ' . $inipath;
    } else 
    {
        echo "No php.ini - MariaDB symlinks are NOT the problem";
    }
?>

当您导航到 http://www.yoursite.com/info.php.

时,这将为您提供您正在使用的 PHP 构建的 php.ini 文件的路径

在我的例子中它显示 /opt/alt/php55/etc/php.ini

这是通过 cPanel 中的 PHP 选择器选择的 PHP 5.5。第一部分:/opt/alt/php55/ 显示我们下一步需要查看的位置。

现在,通过命令行登录,运行:

cd /opt/alt/php55/usr/lib64/php/modules 
ls -la

查看列表,看看是否可以找到类似的内容:

mysql.so -> /opt/alt/php55/etc/mysql10/mysql.so

如果 /etc/****/mysql.so 之间出现的不是 mariadb10(或您使用的任何版本的 MariaDB 运行ning),那么您需要重建符号链接。

unlink mysql.so
unlink mysqli.so
unlink pdo_mysql.so

ln -s /opt/alt/php55/etc/mariadb10/mysql.so /opt/alt/php55/usr/lib64/php/modules/mysql.so
ln -s /opt/alt/php53/etc/mariadb10/mysqli.so /opt/alt/php55/usr/lib64/php/modules/mysqli.so
ln -s /opt/alt/php53/etc/mariadb10/pdo_mysql.so /opt/alt/php55/usr/lib64/php/modules/pdo_mysql.so

然后您可能需要对通过 PHP 选择器可用的其他 PHP 版本执行相同的操作。就我而言,这还涉及修复:

/opt/alt/php53/usr/lib64/php/modules 
/opt/alt/php54/usr/lib64/php/modules 
/opt/alt/php56/usr/lib64/php/modules

这是一个完整的恐怖故事,但最终很容易修复(在重建和其他死胡同之后)。

我有同样的问题,但似乎不是是与符号链接相关的问题:

root@cpanel [/opt/alt/php55/usr/lib64/php/modules]# mysql -V
mysql  Ver 15.1 Distrib 10.0.24-MariaDB, for Linux (x86_64) using readline 5.1

root@cpanel [/opt/alt/php55/usr/lib64/php/modules]# pwd
/opt/alt/php55/usr/lib64/php/modules`

root@cpanel [/opt/alt/php55/usr/lib64/php/modules]# ls -la *mysql*
lrwxrwxrwx 1 root root         38 Apr 12 10:02 mysqli.so -> /opt/alt/php55/etc/mariadb10/mysqli.so
-rwxr-xr-x 1 root linksafe 264176 Mar  3 10:09 mysqlnd.so*
lrwxrwxrwx 1 root root         37 Apr 12 10:02 mysql.so -> /opt/alt/php55/etc/mariadb10/mysql.so
-rwxr-xr-x 1 root linksafe 132512 Mar  3 10:09 nd_mysqli.so*
-rwxr-xr-x 1 root linksafe  49448 Mar  3 10:09 nd_mysql.so*
-rwxr-xr-x 1 root linksafe  28704 Mar  3 10:09 nd_pdo_mysql.so*
lrwxrwxrwx 1 root root         41 Apr 12 10:02 pdo_mysql.so -> /opt/alt/php55/etc/mariadb10/pdo_mysql.so`

是否还有其他问题会导致此问题?

同样的问题,我找到了这个解决方案:

extension=mysql.so
extension=mysqli.so
extension=pdo_mysql.so

应将这些行添加到所有 php.ini 个文件中:

/opt/alt/php44/etc/php.ini
/opt/alt/php51/etc/php.ini
/opt/alt/php52/etc/php.ini
/opt/alt/php53/etc/php.ini
/opt/alt/php54/etc/php.ini
/opt/alt/php55/etc/php.ini
/opt/alt/php55/etc/php.ini
/opt/alt/php70/etc/php.ini

您可能想查看网站的第一个条目。大多数时候,如果是 Wordpress 站点,我会先在应用程序级别调试站点。

所以我首先查看 .htaccess 并重置那里的所有内容。所以我只留下一段来自 wordpress 的代码块:

# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>

# END WordPress

.. 如果它解决了问题,那么应该是插件粘附指令存在问题。

有时,当 Wordfence WAF 在 cPanel 升级后与较新的 php 版本不兼容时,我会收到相同的错误消息。

cpanel 论坛的讨论帮助我解决了这个问题。在我的例子中,我们最近从 easyapache3 转移到 easyapache4 并且发现 ea3 的自定义 "suPHP_config" 指令导致了这个问题。一旦它被禁用,它又能正常工作。

https://forums.cpanel.net/threads/mysql-extension-missing.554251/