У меня есть 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». И теперь все работает.