PHP 7.1.x – mysqli_connect не определен (расширение включено)

Задний план

У меня есть WAMP Server (3.0.6), установленный на моем компьютере под управлением Windows 10. Я разрабатываю сайт WordPress, используя несколько пользовательских таблиц MySQL, поэтому я использую $wpdb .

проблема

Я работал на PHP 7.0.10, и все было в порядке. Сегодня утром я установил PHP 7.1.4, и вдруг я получил эту ошибку:

Неустранимая ошибка: Непринятая ошибка: вызов неопределенной функции mysql_connect () в … \ 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 файлу НЕ является ini файлом в установке PHP. Вместо этого он указывает на установку Apache.

введите описание изображения здесь

Но если вы посмотрите на это, это символическая ссылка 0KB . На самом деле это ссылка на файл ini в установке PHP. Но это не php.ini , а вместо этого указывает на phpForApache.ini . Итак, это:

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

на самом деле

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

Таким образом, вы можете игнорировать то, что находится в папке Apache, и сосредоточиться на своих ini файлах в папке PHP. Однако вы не можете игнорировать php.ini . Вы должны исправить оба.

Престижность Джону Стирлингу предлагает проверить загруженный файл конфигурации в phpInfo() .

Что я сделал

Я установил PHP 7.1 с сайта PHP и забыл перенести мои ini файлы из установки PHP 7.0. Вместо этого я использовал файлы ini по умолчанию, предоставленные веб-сайтом PHP.

Это не сработало, потому что в файлах ini есть хитрости, необходимые для работы PHP с WAMP. Поэтому я скопировал два ini файла из моей папки 7.0.x, а затем начал работать, в основном, за исключением ошибки с mysqli.

Коренная причина моей проблемы

После царапин на этом в течение часа, последний вопрос Фред-ii- наконец дал мне ответ. У меня был PHP, пытающийся ссылаться на старые файлы расширений. Вот почему:

Файл php.ini файл phpForApache.ini , предоставляемый WAMP, как жесткий код, так и некоторые пути. Например, путь к папкам расширений для PHP 7.0.10 закодирован следующим образом:

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

Я скопировал файлы ini , но они указали на папку расширения для 7.0. Файлы dll для 7.0.x не работают с 7.1.x.

Ответ

Я вошел в два файла ( php.ini phpForApache.ini ) в папку PHP 7.1.4 и заменил все экземпляры текста «7.0.10» на «7.1.4». И теперь все работает.