自从今天早上对服务器应用了一些更新后,运行某些 wp cli 命令会返回 PHP 致命错误。
一个例子是... wp cache flush
这昨天还有效,但现在我得到了......
PHP Fatal error: Uncaught Error: Undefined constant "WP_CONTENT_DIR" in /sites/www.mywebsite.com/files/wp-includes/load.php:115
Stack trace:
#0 /sites/www.mywebsite.com/files/wp-settings.php(37): wp_check_php_mysql_versions()
#1 phar:///usr/local/bin/wp/vendor/wp-cli/wp-cli/php/WP_CLI/Runner.php(1237): require('...')
#2 phar:///usr/local/bin/wp/vendor/wp-cli/wp-cli/php/WP_CLI/Runner.php(1158): WP_CLI\Runner->load_wordpress()
#3 phar:///usr/local/bin/wp/vendor/wp-cli/wp-cli/php/WP_CLI/Bootstrap/LaunchRunner.php(23): WP_CLI\Runner->start()
#4 phar:///usr/local/bin/wp/vendor/wp-cli/wp-cli/php/bootstrap.php(74): WP_CLI\Bootstrap\LaunchRunner->process()
#5 phar:///usr/local/bin/wp/vendor/wp-cli/wp-cli/php/wp-cli.php(27): WP_CLI\bootstrap()
#6 phar:///usr/local/bin/wp/php/boot-phar.php(11): include('...')
#7 /usr/local/bin/wp(4): include('...')
#8 {main}
thrown in /sites/www.mywebsite.com/files/wp-includes/load.php on line 115
它引用的代码是第二条 IF 语句,在以下函数中......
function wp_check_php_mysql_versions() {
global $required_php_version, $wp_version;
$php_version = phpversion();
if ( version_compare( $required_php_version, $php_version, '>' ) ) {
$protocol = wp_get_server_protocol();
header( sprintf( '%s 500 Internal Server Error', $protocol ), true, 500 );
header( 'Content-Type: text/html; charset=utf-8' );
printf( 'Your server is running PHP version %1$s but WordPress %2$s requires at least %3$s.', $php_version, $wp_version, $required_php_version );
exit( 1 );
}
if ( ! extension_loaded( 'mysql' ) && ! extension_loaded( 'mysqli' ) && ! extension_loaded( 'mysqlnd' ) && ! file_exists( WP_CONTENT_DIR . '/db.php' ) ) {
require_once ABSPATH . WPINC . '/functions.php';
wp_load_translations_early();
$args = array(
'exit' => false,
'code' => 'mysql_not_found',
);
wp_die(
__( 'Your PHP installation appears to be missing the MySQL extension which is required by WordPress.' ),
__( 'Requirements Not Met' ),
$args
);
exit( 1 );
}
}
我可以看到它正在检查 php 和 mysql 版本,并且今天运行了更新,这些版本可能已经发生了变化,这就是我遇到问题的原因。
我已将 WordPress 设置为记录错误,并且它成功记录了其他错误,例如,如果我暂时中断数据库连接信息。上述函数中的错误消息似乎没有显示在任何地方。我想,如果“您的 PHP 安装似乎缺少 WordPress 所需的 MySQL 扩展。”是真的,那么我遇到的问题将比 wp cli 命令无法运行大得多。
在我看来,WordPress 功能似乎没有在服务器上找到它所需要的内容,但据我所知这就是全部了。
希望明天会发布更多更新,一旦安装,这个问题就会消失,这是一厢情愿的想法吗?
我正在使用 mariadb,所以对于像我这样的新手来说,当问题似乎与 php 和 mysql 版本有关时,这会增加额外的困惑。
该问题出现在 Ubuntu 18.04 和 20.04 上,同时存在 PHP 7.3 和 7.4。
任何指导都将不胜感激。
答案1
检查服务器上的 PHP 版本,今天我们遇到了同样的问题,原因是:
https://www.reddit.com/r/PHP/comments/j98i7s/ubuntu_ppa_installs_php_80rc1_automatically/
答案2
是的,似乎安装了 PHP 8,但可能删除了 PHP 7。
我一直在运行...... apt update apt full-upgrade apt autoremove
以下步骤帮助我解决了这个问题...
- 备份服务器上的每个站点以捕捉今天的任何更改。
- 从备份恢复服务器。
- 从今晚的备份恢复每个站点。
接下来我将继续运行... apt update apt upgrade
不过,也许这与我的更新命令无关。我有一个即将删除的服务器,所以没有恢复。我今天运行了通常的 3 个更新命令,它似乎已经自行修复。也许希望今天的更新能解决我的问题并不是一厢情愿。