Проблема:
Я пытаюсь использовать 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 ().
Я прочитал следующие ответы:
Попытка решения — 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).
mysql_connect()
является устарел, начиная с PHP 5.5, и удалено в PHP 7. PHP 5.5 не является поддерживаемой версией PHP, поэтому автору следует обновить свой код.
использование mysqli_connect()
вместо.
Похоже, ваша установка WordPress пытается использовать mysql_connect
в wp-db.php
, WordPress по умолчанию использует mysql_connect
если не может найти mysqli
установленное ИЛИ отменено.
mysqli
поставляется с php 7 (и вы используете php 7).
Итак, проверьте wp-config.php
и подтвердите, что WP_USE_EXT_MYSQL
определяется для false
Хорошо, хорошо.
Таким образом, проблема была помечена 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" "$@"
Если я сделал что-то глупое, дайте мне знать, спасибо за ваше время. Не стесняйтесь просить разъяснений.