Как исправить ошибку mysql_connect () в wp cli - PullRequest
0 голосов
/ 13 июня 2018

Проблема:

Я пытаюсь использовать wp cli, чтобы делать вещи.В качестве примера обновите wordpress:

wp core update

Fatal error: Uncaught Error: Call to undefined function mysql_connect() in 
path\to\wp-includes\wp-db.php:1564
Stack trace:
#0 path\to\wp-includes\wp-db.php(592): wpdb->db_connect()
#1 path\to\wp-includes\load.php(404): 
wpdb->__construct(details)
#2 path\to\public\wp-settings.php(106): require_wp_db()
#3 phar://path/to/wp-cli.phar/php/WP_CLI/Runner.php(1182): require('C:\\path\\to\\...')
#4 phar://path/to/wp-cli.phar/php/WP_CLI/Runner.php(1107): WP_CLI\Runner->load_wordpress()
#5 phar://path/to/wp-cli.phar/php/WP_CLI/Bootstrap/LaunchRunner.php(23): WP_CLI\Runner->start()
#6 phar://path/to/wp-cli.phar/php/bootstrap.php(75): WP_CLI\Bootstrap\LaunchRunner->process(Object(WP_CLI\Bootstrap\BootstrapState))
#7 phar://path/to/wp-cli.phar/php/wp-cli.php(23): WP_CLI\bootstrap()
#8 phar://C:/ in path/to\wp-includes\wp-db.php on line 1564

Насколько я понимаю, ошибка в mysql_connect ().

Я прочитал следующие ответы:

  • Неопределенная функция mysql_connect () - Это, похоже, предполагает загрузку некоторых пакетов.Я не хочу этого делать, потому что я не понимаю, что они делают (и в настоящее время я использую php, используя MAMP, поэтому я не уверен, что это вызовет у меня больше проблем), но это наводит на мысль, что проблема была с php.ini, который сообщает о предпринятом решении ниже.
  • Неустранимая ошибка: вызов неопределенной функции mysql_connect () - я не думаю, что в моих данных для входа есть ошибка (сам сайт работает) так что это не кажется проблемой

Попытка решения - php.ini

Когда я проверяю, какой php.ini wp cli использует черезкоманда

wp--info

.Он печатает следующее:

OS:     Windows NT 10.0 build 17134 (Windows 10) i586
Shell:  C:\Program Files\Git\usr\bin\bash.exe
PHP binary:     C:\MAMP\bin\php\php7.2.1\php.exe
PHP version:    7.2.1
php.ini used:
WP-CLI root dir:        phar://wp-cli.phar
WP-CLI vendor dir:      phar://wp-cli.phar/vendor
WP_CLI phar path:       C:\path\to\public
WP-CLI packages dir:
WP-CLI global config:
WP-CLI project config:
WP-CLI version: 1.5.1

Так что, похоже, php.ini здесь не использовался.Я думаю, мне нужно это исправить.Для этого я нашел $ WP_CLI_PHP_ARGS , который я пытаюсь вставить. Сейчас я не суперзвезда кодирования, но мне кажется, что мне нужно создать сценарий bash, который будет действовать как обертка, потому чтоони не работают в версии .phar, поэтому я объединил две обертки, которые я нашел в Интернете, чтобы создать это:

#!/usr/bin/env sh

dir=$(d=${0%[/\\]*}; cd "$d"; pwd)

# See if we are running in Cygwin by checking for cygpath program
if command -v 'cygpath' >/dev/null 2>&1; then
   # Cygwin paths start with /cygdrive/ which will break windows PHP,
   # so we need to translate the dir path to windows format. However
   # we could be using cygwin PHP which does not require this, so we
   # test if the path to PHP starts with /cygdrive/ rather than /usr/bin
   if [[ $(which php) == /cygdrive/* ]]; then
       dir=$(cygpath -m $dir);
   fi
fi

dir=$(echo $dir | sed 's/ /\ /g')
"${WP_CLI_PHP}" $WP_CLI_PHP_ARGS "${dir}/wp-cli.phar" "$@"

Когда я запускаю это, он по-разному жалуется.Я предполагаю, что сделал какую-то основную ошибку.(Я также поместил "export WP_CLI_PHP_ARGS = / C / MAMP / bin / php / php7.2.1 / php.ini-production" в моем .bash_profile).

Ответы [ 3 ]

0 голосов
/ 13 июня 2018

Похоже, ваша установка WordPress пытается использовать mysql_connect в wp-db.php.WordPress по умолчанию использует mysql_connect, если не может найти mysqli установленное ИЛИ переопределено.

mysqli поставляется с php 7 (и вы используете php 7).

Итакпроверьте wp-config.php и подтвердите, что WP_USE_EXT_MYSQL определено для false

0 голосов
/ 14 июня 2018

Хорошо, хорошо.

Итак, проблема была помечена wp-db и выглядело так, как будто mysql не работал, но это был mysqli.В конце концов я получил работающий файл php.ini, но думал, что выложу все различные решения, которые могут помочь другим.Номер 4 - это то, что сработало для меня.

1) Отключите mysql_connect, чтобы заставить wordpress использовать mysqli_connect.Перейдите в wp-config.php и добавьте строку

define('WP_USE_EXT_MYSQL', false);

2) Убедитесь, что ваш файл php.ini присутствует в "--with-mysqli = shared" в окне настройки команды?

3) Обновите свой mysqli.Я этого не делал, но после этого советую запустить его в вашей оболочке.

sudo apt-get install mysql-server mysql-common php7.0 php7.0-mysql

Я запускаю git-bash в Windows, такэто вырвало целую чушь для меня.Если вы используете Linux, это может сработать.

4) Как указано выше, я заметил, что php.ini не был указан в wp --info.Я нашел правильный файл, используя (просто создайте файл с этим, и посетите его с вашего сервера).Оказалось, что это было в другом месте, чем я ожидал.Затем я возился с оберткой bash, описанной выше, и в итоге получил это, из-за которого ошибка исчезла:

#!/usr/bin/env sh

dir=$(d=${0%[/\\]*}; cd "$d"; pwd)

# See if we are running in Cygwin by checking for cygpath program
if command -v 'cygpath' >/dev/null 2>&1; then
   # Cygwin paths start with /cygdrive/ which will break windows PHP,
   # so we need to translate the dir path to windows format. However
   # we could be using cygwin PHP which does not require this, so we
   # test if the path to PHP starts with /cygdrive/ rather than /usr/bin
   if [[ $(which php) == /cygdrive/* ]]; then
       dir=$(cygpath -m $dir);
   fi
fi

dir=$(echo $dir | sed 's/ /\ /g')
php -c $WP_CLI_PHP_ARGS "${dir}/wp-cli.phar" "$@"

Если я сделал что-то глупое, дайте мне знать, спасибо за ваше время.Не стесняйтесь просить разъяснений.

0 голосов
/ 13 июня 2018

mysql_connect() устарела , начиная с PHP 5.5 , и удалена в PHP 7. PHP 5.5 не является поддерживаемой версией PHP, поэтому автору следует обновить их код.

Вместо этого используйте mysqli_connect().

...