5

背景

我的 Windows 10 计算机上安装了 WAMP Server (3.0.6)。我正在使用一些自定义 MySQL 表开发一个 WordPress 网站,所以我使用$wpdb.

问题

我在 PHP 7.0.10 上运行,一切都很好。今天早上,我安装了PHP 7.1.4,突然出现这个错误:

致命错误:未捕获错误:调用 ...\wp-includes\wp-db.php:1573 中的未定义函数 mysql_connect()

我对其进行了深入研究,并将问题追溯到__construct()函数,以及以下if声明:

if ( function_exists( 'mysqli_connect' ) ) {

一个 var_dump 向我展示了function_exists( 'mysqli_connect' )正在返回的false.

在此处输入图像描述

不是答案

问题在于我没有mysqli启用扩展:

在此处输入图像描述

在此处输入图像描述

在此处输入图像描述

我尝试过的事情

我已经切换回 7.0.x(并且错误消失了),删除了 7.1.4,重新安装了 7.1.4,然后切换回它。它仍然不起作用。

我尝试了7.1.0,但它不起作用。

我试过打开和关闭扩展程序,但这并没有改变。

我尝试将实际php_mysqli.dll文件从工作 7.0.10 目录复制到 7.1.4 目录中,但这不起作用。

编辑

根据请求,我添加了显示的内容的屏幕截图phpinfo()。在 7.0 下,我看到了 mysqli 的信息部分,而在 7.1 下,该部分丢失了。

在此处输入图像描述 在此处输入图像描述

4

1 回答 1

5

背景

首先,稍微了解一下 WAMPServer 处理php.ini文件的方式。如果您使用phpinfo(),您可能会注意到加载ini文件的路径不是PHP 安装中的ini文件。相反,它指向 Apache 安装。

在此处输入图像描述

但如果你看它,它是一个0KB符号链接。实际上是指向iniPHP 安装中的文件的链接。但它不是php.ini,而是指向phpForApache.ini。所以这:

...\wamp64\bin\apache\apache2.4.23\bin\php.ini

实际上是

...\wamp64\bin\php\php[VERSION]\phpForApache.ini

因此,您可以忽略 Apache 文件夹中的内容,而专注于iniPHP 文件夹中的文件。但是,您不能忽略php.ini. 你需要纠正两者。

感谢Jon Stirling建议在phpInfo().

我做了什么

我从 PHP 网站安装了 PHP 7.1,但忘记ini从 PHP 7.0 安装传输我的文件。我改为使用 PHP 网站提供的默认ini文件。

那没有用,因为ini需要对文件进行一些调整才能使 PHP 与 WAMP 一起工作。所以我ini从我的 7.0.x 文件夹中复制了这两个文件,然后它开始工作,主要是除了 mysqli 的错误。

我的问题的根本原因

经过一个小时的研究,Fred -ii-最后一个问题终于让我得到了答案。我让 PHP 试图引用旧的扩展文件。原因如下:

WAMP 提供的php.ini文件和phpForApache.ini文件都对一些路径进行了硬编码。例如,PHP 7.0.10 的扩展文件夹路径编码如下:

extension_dir ="c:/wamp64/bin/php/php7.0.10/ext/"

我已将ini文件复制过来,但它们指向 7.0.0 的扩展文件夹。7.0.x的dll文件不适用于 7.1.x。

回答

我进入php.ini phpForApache.iniPHP 7.1.4 文件夹中的两个文件 ( ),并将文本“7.0.10”的所有实例全局替换为“7.1.4”。现在一切正常。

于 2017-05-08T14:13:38.630 回答