常见问题

错误:无法连接到数据库

几种可能性:

a) 您使用的是 MAMP,但 WP-CLI 没有使用 MAMP PHP 二进制文件。

您可以通过运行来检查哪个 PHP WP-CLI 正在使用。wp --info

如果需要指定备用 PHP 二进制文件,请参阅使用自定义 PHP 二进制文件

b)这是一个WordPress多站点安装。

c) 中的数据库凭据实际上不正确。wp-config.php

运行 wp --info 生成 HTML 输出

如果您在禁用 Phar 支持的服务器上运行,您可能会看到:wp --info

$ wp --info
Content-type: text/html; charset=UTF-8

使用 WP-CLI Phar 时,您需要将 Phar 支持列入白名单:php.ini

suhosin.executor.include.whitelist = phar

PHP 致命错误:无法重新声明 wp_unregister_GLOBALS()

如果在运行命令时遇到此致命错误,则可能已移动或编辑超出 wp-cli 支持的范围:wp``wp-config.php

PHP Fatal error: Cannot redeclare wp_unregister_GLOBALS() (previously declared in /var/www/foo.com/wp-includes/load.php:18) in /var/www/foo.com/wp-includes/load.php on line 33

WP-CLI 的要求之一是该行:

require_once(ABSPATH . 'wp-settings.php');

保留在文件中,因此,如果您修改或移动了它,请将其放回原处。当WP-CLI运行时,它与正则表达式匹配。wp-config.php

PHP 致命错误:调用未定义的函数 \

在WP-CLI可以加载之前,它需要知道中定义的所有常量(数据库连接详细信息等)。因为WP-CLI不希望WordPress在提取常量时加载,所以它使用正则表达式来剥离语句。wp-settings.php``wp-config.php``wp-config.php``require_once(ABSPATH . 'wp-settings.php');

如果你以调用WordPress函数的方式修改了你的,PHP将失败并出现致命错误,因为你在加载WordPress来定义WordPress函数之前调用WordPress函数。wp-config.php``wp-config.php

例:

$ wp core check-update
PHP Fatal error:  Call to undefined function add_filter() in phar:///usr/local/bin/wp/php/WP_CLI/Runner.php(952) : eval()'d code on line N

超出常量定义的修改不是最佳做法。您应该将任何修改移动到WordPress mu插件,这将保留修改的功能,同时允许wp-cli解析您的wp-config.php而不会引发PHP错误,并防止其他错误。wp-config.php

请参阅: #1631

PHP 致命错误:调用未定义的函数 cli\posix_isatty()

请确保您已安装 php 进程扩展。例如 Centos 6:yum install php-process

PHP 致命错误:允许的内存大小 999999 字节已耗尽(尝试分配 99 字节)

如果您在运行时遇到与内存相关的 PHP 致命错误,则可能是内存不足。wp package install

WP-CLI 在后台使用 Composer 来管理 WP-CLI 包。但是,Composer 有点占用内存,因此您需要增加内存限制以适应它。

编辑您的永久修复:php.ini

# Find your php.ini for PHP-CLI
$ php -i | grep php.ini
Configuration File (php.ini) Path => /usr/local/etc/php/7.0
Loaded Configuration File => /usr/local/etc/php/7.0/php.ini
# Increase memory_limit to 512M or greater
$ vim /usr/local/etc/php/7.0/php.ini
memory_limit = 512M

即时设置为临时修复:memory_limit

$ php -d memory_limit=512M "$(which wp)" package install <package-name>

如果您的 PHP 进程仍然内存不足,请尝试以下步骤:

  1. 重新启动 PHP。
  2. 检查其他 php.ini 文件:
$ php -i | grep additional
Scan this dir for additional .ini files => /usr/local/etc/php/7.1/conf.d
# Edit the additional file(s) and increase the memory_limit to 512M or greater
$ vim /usr/local/etc/php/7.1/conf.d
memory_limit = 512M

错误:啧啧!看起来您正在以 root 身份运行它。

以根用户身份运行WP-CLI是非常危险的。当您以root身份执行WP-CLI时,WordPress实例中的任何代码(包括您安装的第三方插件和主题)都将对整个服务器具有完全权限。这可能会使WordPress实例中的恶意代码危及整个服务器。

WP-CLI 项目强烈建议不要以根用户身份运行 WP-CLI。

另请参阅:#973

PHP 通知:$_SERVER 超全局上的未定义索引

超全局是一个数组,通常由 Web 服务器填充,其中包含标头、路径和脚本位置等信息。PHP CLI 不会填充此变量,WP-CLI 也不会,因为许多变量详细信息在命令行中毫无意义。$_SERVER

在访问超全局上的值之前,您应该检查是否设置了键:$_SERVER

if ( isset( $_SERVER['HTTP_X_FORWARDED_PROTO'] ) && 'https' === $_SERVER['HTTP_X_FORWARDED_PROTO'] ) {
  $_SERVER['HTTPS']='on';
}

在 中使用时,您需要在 WP-CLI 上下文中设置默认值:$_SERVER['HTTP_HOST']``wp-config.php

if ( defined( 'WP_CLI' ) && WP_CLI && ! isset( $_SERVER['HTTP_HOST'] ) ) {
    $_SERVER['HTTP_HOST'] = 'example.com';
}

另请参阅:#730

PHP 通知:使用未定义的常量 STDOUT

常量由 PHP CLI 定义。如果您收到缺少的错误通知,则可能是因为您没有通过 PHP CLI 运行 WP-CLI。请相应地检查您的服务器配置。STDOUT``STDOUT

PHP 解析错误:语法错误,意外的“?”在... /php/WP_CLI/Runner.php ...eval()'d 代码在第 1 行

如果在运行命令时收到此错误,则最可能的原因是 .此问题将在WP-CLI的未来版本中解决,但同时您可以通过运行以下命令来解决此问题:wp``wp-config.php

$ sed -i '1s/^\xEF\xBB\xBF//' $(wp config path)

或者使用您喜欢的编辑器手动删除。BOM

另请参阅:wp-cli/search-replace-command#71

找不到 wp-内容目录 / 使用 $_SERVER['document_root']

$_SERVER['document_root']由 Web 服务器根据传入的 Web 请求定义。因为这种类型的上下文对 PHP CLI 不可用,所以对 WP-CLI 不可用。此外,WP-CLI不能像其他一些值那样安全地模拟。$_SERVER['document_root']``$_SERVER['document_root']``$_SERVER['http_host']``$_SERVER

如果您在文件中使用,则应改为使用或类似。$_SERVER['document_root']``wp-config.php``dirname( __FILE__ )

另请参阅:#785

全局参数和命令参数之间的冲突

所有全局参数(例如 )可能与要接受的命令参数冲突。例如,将 RSS 小部件添加到侧边栏不会填充该小部件的提要 URL:--url=<url>

$ wp widget add rss sidebar-1 1 --url="http://www.smashingmagazine.com/feed/" --items=3
Success: Added widget to sidebar.
  • 预期结果:小组件设置了源 URL。
  • 实际结果:添加的小部件时,项目数设置为 3,但源 URL 为空。

使用环境变量告诉 WP-CLI 将命令之前的任何参数视为全局参数,将命令之后的任何参数视为本地参数:WP_CLI_STRICT_ARGS_MODE

WP_CLI_STRICT_ARGS_MODE=1 wp --url=wp.dev/site2 widget add rss sidebar-1 1 --url="http://wp-cli.org/feed/"

在此示例中,是全局参数,将 WP-CLI 设置为在 WP 多站点安装上针对“site2”运行。 是本地参数,使用正确的 URL 设置 RSS 源小部件。--url=wp.dev/site2``--url="http://wp-cli.org/feed/"

另请参阅:#3128

警告:某些代码正在尝试执行 URL 重定向

大多数情况下,是一些插件或主题代码禁用了对非管理员的 wp-admin 访问权限。

除了禁用保护之外,快速修复是传递用户参数:--user=some_admin

另请参阅:#477

无法在 Windows 上创建标题中包含拉丁字符的帖子

考虑以下示例:

wp post create --post_title="Perícias Contábeis"

在 PHP 参数中使用 UTF-8 不适用于 PHP <= 7.0 的 Windows,但它适用于 PHP >= 7.1,因为它已作为支持长路径和 UTF-8 路径的一部分进行修复。PHP <= 7.0 的解决方法是使用以下选项:--prompt

echo "Perícias Contábeis" | wp post create --post_type=page --post_status=publish --prompt=post_title

另请参阅:#4714

安装挂起

如果在尝试从 GitHub 克隆资源时安装似乎永远挂起,请确保允许您使用 SSL(端口 443)和 Git(端口 9418)连接到 Github,以进行出站连接。

W3 总缓存错误:某些文件似乎丢失或不合适。

W3 总缓存对象缓存可能会导致此问题。禁用对象缓存并选择性地删除将允许 WP-CLI 再次工作。wp-content/object-cache.php

另请参阅:#587

自动更新程序不适用于 3.4 之前的版本

该命令旨在适用于WordPress 3.4及更高版本。为了能够将较旧的网站更新到最新的WordPress,您可以尝试以下替代方法之一:wp core update

  1. **全自动:**运行以下载最新的WordPress并将其替换为您的文件(别担心,将保持不变)。然后,运行以更新数据库。由于该过程不理想,请再次运行,新版本应该可用。wp core download --force``wp-config.php``wp core update-db``wp core download --force
  2. **半自动:**运行以下载所有文件并在当前安装中替换它们,然后在出现提示时导航到并运行数据库升级。wp core download --force``/wp-admin/