我已经升级了一个不太旧的Wordpress网站版本,还将服务器从php 5.6升级到了php 7.2(所有这些都在本地和受控环境中进行。)
该网站有一些插件和一个自定义主题。禁用并重新启用插件以控制错误的插件。
在所有允许升级的插件升级之后,我一直在跟踪错误并解决错误,直到现在为止。
输入主题选项和其他插件配置时,出现错误消息:
该站点遇到技术困难。请查看您的电子邮件以获取说明。
我在apache / php错误日志和Wordpress调试日志中找不到任何错误跟踪。所有PHP配置都设置为显示所有错误,并且我的wp-config.php
文件具有以下行来强制调试和记录:
define('WP_DEBUG', true );
define('WP_DEBUG_LOG', true );
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);
在哪里可以获取有关这些错误的更多具体信息?我知道是哪个插件/主题引起的,但是我需要调试并找到发生它们的地方。
谢谢。
答案 0 :(得分:0)
请按照以下步骤操作:
将以下这些代码粘贴到wp-config.php中
define('WP_DEBUG',true);
define('WP_DEBUG_LOG',true);
define('WP_DEBUG_DISPLAY',true);
@ini_set('display_errors',1);
define('SCRIPT_DEBUG',true);
在wp-content目录中创建一个名为debug.log的文件。
3。像以前一样运行WordPress网站,并在任何文本编辑器中打开debug.log文件。 您会在这里找到所有的东西(错误)。
答案 1 :(得分:0)
因此,我发现脚本在其中Wordpress处理致命错误,并在通用消息下掩盖了这些错误:
该站点遇到技术困难。请查看您的电子邮件以获取说明。
脚本/wp-includes/class-wp-fatal-error-handler.php
在try..catch
块下处理这些错误,这使得错误消息无法显示。
因此,仅用于调试的临时解决方案是修改方法handle()
以禁用try..catch
并记录错误消息,如下所示:
免责声明:此修改一旦网站投入生产,就必须撤消,仅用于调试目的。
public function handle() {
if ( defined( 'WP_SANDBOX_SCRAPING' ) && WP_SANDBOX_SCRAPING ) {
return;
}
// comment try..catch
// try {
// Bail if no error found.
$error = $this->detect_error();
if ( ! $error ) {
return;
}
//log error message
error_log($error["message"]);
return;
if ( ! isset( $GLOBALS['wp_locale'] ) && function_exists( 'load_default_textdomain' ) ) {
load_default_textdomain();
}
if ( ! is_multisite() && wp_recovery_mode()->is_initialized() ) {
wp_recovery_mode()->handle_error( $error );
}
// Display the PHP error template if headers not sent.
if ( is_admin() || ! headers_sent() ) {
$this->display_error_template( $error );
}
// } catch ( Exception $e ) {
// Catch exceptions and remain silent.
// }
}
如果error_log
文件中存在以下行,则函数wp-content/debug.log
会将错误记录到wp-config.php
:
define( 'WP_DEBUG_LOG', true );
否则返回Apache / php错误日志。
当然,还有其他方法和其他配置可以调试这些错误,但这很简单。