Я пытаюсь запустить PHPUnit для юнит-теста плагина WordPress, но ошибка в названии продолжает появляться.
Я использовал WP-CLI для настройки юнит-тестов, но WP-CLI выдает похожую ошибку, когда пытаюсь его запустить.
Я использую MAMP для запуска базы данных.
Я настроил WP-CLI и PHPUnit как phars, которые имеют псевдоним в ~ / .bash-profile, и запускались с «php» по умолчанию, предоставленным OS X.
Изменение этого и запуск WP-CLI и PHPUnit с последней версией PHP, поставляемой MAMP, исправили WP-CLI (он работал и подключался к базе данных очень хорошо), но PHPUnit по-прежнему выдавал ту же ошибку.
Я попытался отредактировать файл wp-config.php и установить для хоста «: /path/to/mamp/mysql.socket», «localhost: /path/to/mamp/mysql.socket» и «127.0.0.1 «, ни один из которых не помог.
Я полностью застрял, и не знаю, что попробовать дальше.
Я только что столкнулся с этой ошибкой — вы проверили, существует ли схема, что ваш wp-config.php
указывает?
В моем случае я совершенно забыл создать его, поэтому исправление было таким простым, как CREATE DATABASE wordpress
,
Я также столкнулся с этой ошибкой, когда wp-config.php
неверный хост базы данных (попробуйте поменять местами localhost
а также 127.0.0.1
).
Во-первых, убедитесь, что MySql действительно запущен. Он не создаст файл сокета, если процесс еще не начался.
netstat -tulpn | grep mysql
или же
ps -e | grep mysql
Если MySql работает, измените хост базы данных с localhost
в 127.0.0.1
в wp-config.php работает, но это только обходной путь.
Когда вы указываете localhost
, mysqli_real_connect()
Функция пытается подключиться к вашей базе данных через сокет Unix, который она не может найти (отсюда и ошибка «нет такого файла».) Когда вы указываете 127.0.0.1
он пытается подключиться к вашей базе данных, используя порт TCP по умолчанию (обычно 3306), который работает.
Это не решает проблему того, что PHP не знает, где найти ваш сокет MySql. Вам необходимо настроить следующие параметры в вашем php.ini
, Расположение сокета зависит от вашей ОС, но обычно вы можете найти его, запустив locate mysql.sock
, Вот настройки, которые у меня работают на CentOS 6.8.
php.ini
pdo_mysql.default_socket = /var/lib/mysql/mysql.sock
mysqli.default_socket = /var/lib/mysql/mysql.sock
Другие системы обычно используют /tmp/mysqld.sock
, Вы можете проверить настроенное местоположение, проверив файл конфигурации MySql my.cfg
,
После того, как вы настроили PHP для указания на правильное расположение сокета, перезапустите Apache / nginx, чтобы он выбрал новые настройки.
Теперь вы можете использовать localhost
как предполагалось.
Просто зайдите в свой phpMyAdmin, щелкните по своей базе данных и скопируйте ip, на котором запущен сервис, и замените его в файле wp-config.php:
/ ** MySQL hostname * /
define (‘DB_HOST’, ‘localhost’);
/ ** MySQL hostname * /
define (‘DB_HOST’, ‘ip_where_is_running_mysqlserver’);
Это смутило меня, но я решил в конце концов.
Мой порт MySQL 3308, поэтому я изменяю «127.0.0.1» на «localhost: 3308» в
$cfg['Servers'][$i]['host'].
Оно работает!
Кроме того, я установил
$cfg['Servers'][$i]['controluser'] = '';
$cfg['Servers'][$i]['controlpass'] = '';
А также…
$cfg['Servers'][$i]['auth_type'] = 'cookie';
Но я думаю, что наиболее важным является изменение порта.
В сообщаемой строке в /wp-includes/wp-db.php (строка 1489 в WordPress v 4.5) код выглядит так:
mysqli_real_connect( $this->duh, $host, $this->dbuser, $this->dbpassword, null, $port, $socket, $client_flags );
Проблема уходит, добавив @
спереди. Таким образом, код должен читать:
@mysqli_real_connect( $this->duh, $host, $this->dbuser, $this->dbpassword, null, $port, $socket, $client_flags );
Добавить недостающее @
, сохраните и загрузите измененный файл, чтобы предупреждение исчезло.