PHP 7.1.x – mysqli_connect未定义(扩展已打开)
作者:互联网
背景
我的Windows 10计算机上安装了WAMP Server(3.0.6).我正在使用一些自定义MySQL表开发一个WordPress站点,所以我使用$wpdb.
问题
我在PHP 7.0.10上运行,一切都很好.今天早上,我安装了PHP 7.1.4,突然间我收到了这个错误:
Fatal error: Uncaught Error: Call to undefined function mysql_connect() in …\wp-includes\wp-db.php:1573
我挖了它并将问题追溯到__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下,该部分缺失.
解决方法:
背景
首先,关于WAMPServer处理php.ini文件的方式.如果使用phpinfo(),您可能会注意到加载的ini文件的路径不是PHP安装中的ini文件.它反而指向Apache安装.
但是如果你看一下,它就是一个0KB的符号链接.实际上是PHP安装中的ini文件的链接.但它不是php.ini,而是指向phpForApache.ini.所以这:
...\wamp64\bin\apache\apache2.4.23\bin\php.ini
实际上是
...\wamp64\bin\php\php[VERSION]\phpForApache.ini
因此,您可以忽略Apache文件夹中的内容并关注PHP文件夹中的ini文件.但是,你不能忽略php.ini.你需要纠正两者.
感谢Jon Stirling建议在phpInfo()中检查加载的配置文件.
我做了什么
我从PHP网站安装了PHP 7.1,忘了从PHP 7.0安装中传输我的ini文件.我改为使用PHP网站提供的默认ini文件.
这不起作用,因为在使用WAMP使PHP工作所需的ini文件中有一些调整.所以我从我的7.0.x文件夹中复制了两个ini文件,然后它开始工作,主要是,除了mysqli的错误.
我问题的根本原因
在抓了一个小时之后,Fred -ii-的last question终于找到了答案.我有PHP尝试引用旧的扩展文件.原因如下:
由WAMP提供的php.ini文件和phpForApache.ini文件都是硬编码的一些路径.例如,PHP 7.0.10的扩展文件夹路径编码如下:
extension_dir ="c:/wamp64/bin/php/php7.0.10/ext/"
我复制了ini文件,但他们指向7.0的扩展文件夹. 7.0.x的dll文件不适用于7.1.x.
回答
我进入了PHP 7.1.4文件夹中的两个文件(php.ini phpForApache.ini),并将文本“7.0.10”的所有实例全局替换为“7.1.4”.现在一切正常.
标签:php,mysqli,wampserver,php-7-1 来源: https://codeday.me/bug/20190622/1265215.html