我试图运行PHPUnit来对WordPress插件进行单元测试,但标题中的错误仍然显示出来。
我使用WP-CLI设置单元测试,但是当我尝试运行时,WP-CLI也会抛出类似的错误。
我使用MAMP来运行数据库。
我已将WP-CLI和PHPUnit设置为phars,它们在〜/ .bash-profile中别名,并使用默认的" php"由OS X提供。 更改此项,并使用MAMP提供的最新PHP版本运行WP-CLI和PHPUnit修复了WP-CLI(它正在运行并连接到数据库就好了)但PHPUnit仍然抛出相同的错误。
我已经尝试编辑wp-config.php文件,并将主机设置为":/ path / to / mamp / mysql.socket"," localhost:/ path / to / MAMP / mysql.socket"和" 127.0.0.1",没有一个帮助。
我完全陷入了困境,并且不知道下一步该尝试什么。
答案 0 :(得分:15)
我刚遇到此错误 - 您是否检查了wp-config.php
指定的架构?
在我的情况下,我完全忘记创建它,因此修复就像CREATE DATABASE wordpress
一样简单。
当wp-config.php
数据库主机错误时,我也会遇到此错误(尝试交换localhost
和127.0.0.1
)。
答案 1 :(得分:6)
首先,确保MySql实际上正在运行。如果流程尚未启动,它将无法创建套接字文件。
netstat -tulpn | grep mysql
或
ps -e | grep mysql
如果MySql正在运行,请将wp-config.php中的数据库主机从localhost
更改为127.0.0.1
,但这只是一种解决方法。
当您指定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
。
答案 2 :(得分:0)
只需转到你的phpMyAdmin,点击你的数据库并复制正在运行服务的ip并替换你的wp-config.php文件:
/ ** MySQL主机名* / define('DB_HOST','localhost');
/ ** MySQL主机名* / define('DB_HOST','ip_where_is_running_mysqlserver');
答案 3 :(得分:0)
这让我很困惑,但最终我解决了。
我的MySQL端口是3308,所以我改变了#34; 127.0.0.1&#34;到&#34; localhost:3308&#34;在
Object.prototype = null
有效!
另外,我设置了
$cfg['Servers'][$i]['host'].
和...
$cfg['Servers'][$i]['controluser'] = '';
$cfg['Servers'][$i]['controlpass'] = '';
但我认为最关键的是端口改变了。
答案 4 :(得分:0)
为wp-cli
创建符号查找更为有效,并消除了编辑许多文件并跟踪wp-config
文件的问题。
我为MAC Sierra和MAMP PRO做到了,
使用netstat
找到mysql套接字文件后,创建它的符号链接
netstat -a | grep mysql
在var
文件夹中创建文件。
cd /var
sudo mkdir mysql
sudo chmod 755 mysql
cd mysql
sudo ln -s /Applications/MAMP/tmp/mysql/mysql.sock mysql.sock
WordPress安装文件夹中的wp插件列表有效
/path/to/wordpress/installation $ wp plugin list
-------------------------------------------------+----------+-----------+---------+
| name | status | update | version |
+-------------------------------------------------+----------+-----------+---------+
| advanced-custom-fields | active | none | 5.9.0 |
| akismet | active | none | 4.1.6 |
| bbp-voting | inactive | available | 1.3.5 |
| breadcrumb-navxt | active | none | 6.5.0 |
| contact-form-7 | active | none | 5.2.2 |
| flamingo | active | none | 2.2 |
| keydesign-addon | active | none | 3.2 |
| post-my-contact-form-7 | active | none | 4.1.8 |
答案 5 :(得分:-2)
在/wp-includes/wp-db.php(WordPress v 4.5中的第1489行)中的报告行中,代码为:
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 );
添加缺少的@
,保存并上传修改后的文件以使警告消失。