簡體   English   中英

PHP 7.1.x-未定義mysqli_connect(擴展已打開)

[英]PHP 7.1.x - mysqli_connect Isn't Defined (Extension is turned on)

背景

我在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的info部分,而在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()檢查已加載的配置文件, phpInfo()

我做了什么

我從PHP網站安裝了PHP 7.1,卻忘記了從7.0的安裝轉移我的ini文件。 我改用PHP網站提供的默認ini文件。

那是行不通的,因為要使PHP與WAMP一起使用, ini文件中需要進行一些調整。 因此,我從7.0.x文件夾中復制了兩個ini文件,然后它開始正常工作,除了mysqli錯誤。

我的問題的根本原因

經過一個小時的摸爬滾弗雷德-ii-最后一個問題終於使我得到了答案。 我讓PHP嘗試引用舊的擴展文件。 原因如下:

WAMP提供的php.ini文件和phpForApache.ini文件都對一些路徑進行了硬編碼。 例如,PHP 7.0.10的extensions文件夾路徑編碼為:

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”。 現在一切正常。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM