从 7.0 升级到 PHP 7.2 破坏了 NGINX 服务器上的 MySQLi 函数

从 7.0 升级到 PHP 7.2 破坏了 NGINX 服务器上的 MySQLi 函数

编辑-已修复,彻底清除并重新安装 PHP(见底部)

我托管了一个带有 MySQL 数据库后端的 Web 服务器(使用 NGINX)。它之前使用 PHP 7.0 运行,但当我安装一些更新时,系统显然将我升级到了 PHP 7.2。我在 Ubuntu 18.x 上使用 NGINX 和 php/7.2/fpm

我的登录页面在函数调用时失败mysqli_connect()尽管我确信数据库访问信息是正确的。 /var/log/nginx 中的确切错误消息是:

PHP Fatal error: Uncaught Error: Call to undefined function mysqli_connect() in [filename]

我尝试编辑/etc/php/7.2/fpm/php.ini文件并取消注释该extention=mysqli行。我还尝试添加我遇到的所有其他扩展(mysqli.so、mysqli.dll 等),但无济于事。

我已经完全卸载了 PHP 7.0(我之前使用的版本)。当我打开info.php浏览器查看 PHP 信息时,它显示“PHP 版本 7.2.15-0ubuntu0.18.04.1”,但文件中任何地方都没有提到“mysqli”。加载的配置文件确实是我编辑的那个(/etc/php/7.2/fpm/php.ini)

是否有人遇到过类似的问题,尤其是从 PHP 7.0 升级到 PHP 7.2 时?我知道 mysqli 在 PHP 5 之后已被弃用,但这不是这里的问题,因为这完全适用于 PHP 7.0,并且我正在使用所有 mysqli (不是 mysql) 函数。

谢谢您的帮助


因此,显然,我的服务器上仍有一些 PHP 7.0 配置文件,我没有完全删除它们,当我安装 PHP 7.2 时,它使用了一些旧的 PHP 7.0 配置文件,而不是清除它们并安装新版本。我的解决方案是首先使用以下命令完全卸载 PHP(7.0 和 7.2):

sudo apt-get purge `dpkg -l | grep php| awk '{print $2}' |tr "\n" " "`

归功于如何彻底删除 PHP?对于该解决方案 -不要使用该页面上的第一个答案,该答案简单地使用sudo apt-get purge 'php*'- 这可能会消灭与该构造不良的正则表达式匹配的其他文件!

最后,我从头开始重新安装了 PHP 7.2,并添加了必要的软件包(包括 MySQL,默认情况下带有 mysqli 扩展)。我使用了以下命令:sudo apt install php-fpm php-mysql

这似乎会自动启用我的文件中的扩展/etc/php/7.2/fpm/php.ini,但如果它对您不起作用,请检查该行extensions=mysqli(或变体,如extensions=mysqli.so)是否取消注释。

如果有人遇到类似的问题,祝你好运!

相关内容