网站已运行 162 · 20小时 · 41 · 27
目录

WordPress WP_DEBUG 怎么开?错误日志与生产环境安全排查

WordPress WP_DEBUG 开关到 debug.log 错误定位流程示意图

WordPress WP_DEBUG 怎么开?遇到白屏、500 错误、插件功能失效或后台保存失败时,很多教程只让你把 WP_DEBUG 改成 true。这样可能找到线索,也可能把服务器路径、插件文件名和错误信息直接显示给访客。

如果日志已经出现 Fatal error,而且前台、后台和普通 WP-CLI 都打不开,可以继续按 WordPress 500 错误与插件冲突排查流程,用跳过插件、主题加载的对照先缩小范围,再决定是否隔离组件。

更稳妥的做法不是“长期打开调试”,而是先备份配置,临时记录日志,按时间复现问题,读完后关闭并处理日志文件。下面这套流程适合有文件管理器、SFTP 或 SSH 权限的 WordPress 站点。

WordPress WP_DEBUG、日志和前台显示是什么关系

这几个常量经常一起出现,但作用并不相同:

配置控制什么生产站建议
WP_DEBUG开启 WordPress 调试模式,并提高错误报告级别只在排障窗口临时开启
WP_DEBUG_LOG把错误写入日志;设为 true 时通常写入 wp-content/debug.log开启调试时使用,最好放到不可公开访问的位置
WP_DEBUG_DISPLAY控制错误是否显示在页面 HTML 中保持 false
SCRIPT_DEBUG让 WordPress 使用未压缩的核心 CSS、JavaScript 文件排查核心脚本时才开,不是普通 PHP 报错的必需项
三个 Debug 常量互相关联,但“记录日志”和“把错误显示给访客”不是一回事。

WP_DEBUG_LOGWP_DEBUG_DISPLAY 都依赖 WP_DEBUG。例如配置里虽然保留了 WP_DEBUG_LOG=true,只要 WP_DEBUG=false,WordPress 就不会通过这套调试机制继续写日志。

先检查当前状态,不要一上来改 wp-config.php

有 WP-CLI 时,可以先只读检查 WordPress 实际加载的值:

wp eval 'var_export( array(
    "WP_DEBUG"         => WP_DEBUG,
    "WP_DEBUG_LOG"     => WP_DEBUG_LOG,
    "WP_DEBUG_DISPLAY" => WP_DEBUG_DISPLAY,
    "environment"      => wp_get_environment_type(),
) );'

我在本站当前的 WordPress 7.0.4 环境做过一次只读核对:环境类型是 productionWP_DEBUG=falseWP_DEBUG_LOG=trueWP_DEBUG_DISPLAY=false。这正好说明,不能看到某一行配置就单独下结论,要以 WordPress 实际加载后的组合状态为准。

如果没有 WP-CLI,就在 wp-config.php 中搜索这些常量。重点检查是否被定义了两次,以及配置是否放在 /* That's all, stop editing! Happy publishing. */ 之前。

生产站怎么安全开启 WordPress WP_DEBUG

1. 先备份 wp-config.php

修改前至少保存一份当前配置。SSH 环境可以在 WordPress 根目录执行:

cp wp-config.php "wp-config.php.bak-$(date +%Y%m%d-%H%M%S)"

共享主机也可以通过文件管理器或 SFTP 下载一份。备份文件包含数据库连接等敏感信息,不要传到公开网盘、代码仓库或网站可访问目录。

2. 开日志,但不要把错误显示给访客

把下面配置放到停止编辑注释之前,并确保每个常量只定义一次:

define( 'WP_DEBUG', true );
define( 'WP_DEBUG_LOG', true );
define( 'WP_DEBUG_DISPLAY', false );
@ini_set( 'display_errors', 0 );

默认日志通常位于 wp-content/debug.log。WordPress 也允许把 WP_DEBUG_LOG 设置成有效的绝对路径,例如放到网站公开目录之外:

define( 'WP_DEBUG_LOG', '/absolute/private/path/wordpress-debug.log' );

这个目录必须真实存在,并允许 PHP 进程写入。不要照抄示例路径;路径写错或权限不足时,页面可能继续报错,但日志文件不会出现。

3. 记录时间,再复现一次问题

先记下操作时间,然后只复现一次最小步骤。例如“15:32 打开订单编辑页并点击更新”,比连续刷新十几次更容易在日志中定位。随后查看末尾内容:

tail -n 100 wp-content/debug.log

# 需要实时观察时使用,完成后按 Ctrl+C 退出
tail -f wp-content/debug.log

如果问题只发生在 Ajax、REST API 或后台定时任务中,前台没有错误提示并不代表没有日志。WordPress 官方也特别提到,日志适合检查这类“屏幕外”请求。定时任务相关问题可以结合本站的 WP-Cron 与 Action Scheduler 排查流程一起判断。

debug.log 应该先看什么

不要看到几十条 Warning 就从第一行开始逐条修。先围绕故障时间,找会中断请求的错误:

日志关键词通常意味着什么优先动作
PHP Fatal error / Uncaught请求被致命错误中断先看文件路径、行号和调用栈
Parse errorPHP 语法无法解析回看刚修改的代码或配置
Warning运行异常,但不一定中止请求判断是否与故障时间和功能相关
Notice / Deprecated代码规范或兼容性提醒记录来源,通常低于 Fatal 的优先级

如果日志里出现 Allowed memory size exhausted,还要区分 PHP 的实际 memory_limit 与 WordPress 内存常量;可以继续参考 WordPress 内存不足排查流程

日志里的插件目录不一定就是根因。一个插件可能只是最后调用了已经被其他代码污染的数据。更可靠的判断方式是:先确认同一错误能否稳定复现,再在测试站停用相关插件、切换到默认主题或回退刚发生的改动,比较错误是否消失。

如果问题主要表现为后台慢,而不是直接报错,日志只能提供一部分线索,还需要继续检查慢查询、对象缓存、计划任务和插件请求。可以参考 WordPress 后台变慢排查,不要把所有性能问题都归给某一条 Warning。

为什么打开后没有生成 debug.log

  • 还没有触发可记录的错误:打开调试不会自动制造日志内容。
  • 配置定义了两次:前面的定义已经生效,后面再写一组不会按预期覆盖。
  • 把布尔值写成了字符串:'false' 是非空字符串,不等于布尔值 false
  • 目录不可写:PHP 进程没有权限创建或追加日志。
  • 请求被整页缓存直接响应:没有真正执行到 PHP;应复现后台或动态请求,或按站点缓存策略定向绕过。
  • 主机把错误写到服务器日志:部分托管环境会把 PHP 错误集中到控制面板日志,需要同时核对主机日志入口。

调试完成后怎么关闭

确认已经保存必要的错误片段后,把配置恢复为生产状态:

define( 'WP_DEBUG', false );
define( 'WP_DEBUG_LOG', false );
define( 'WP_DEBUG_DISPLAY', false );

再次运行前面的 WP-CLI 只读命令,确认实际值已经变化;然后检查前台、后台和刚才的故障路径。日志可能包含服务器绝对路径、请求参数、邮箱或插件返回内容,提取排障所需片段后应按站点的日志保留策略归档或清理,不能长期放在可公开下载的位置。

SAVEQUERIESSCRIPT_DEBUG 和禁用致命错误恢复机制都不是这套基础流程的默认步骤。它们有明确用途,也可能增加开销或改变错误表现;没有对应排查目标时,不要为了“信息更多”全部打开。

一套可复用的 WordPress 调试顺序

  1. 记录故障现象、URL、账号角色和发生时间。
  2. 确认有可恢复备份,并单独备份 wp-config.php
  3. 只读检查当前 Debug 常量,避免重复定义。
  4. 临时开启 WP_DEBUG 和日志,同时关闭前台显示。
  5. 只复现一次最小步骤,并按时间查找 Fatal、Uncaught 和 Parse error。
  6. 在测试站验证停用插件、切换主题或回退改动后的差异。
  7. 修复后关闭调试,复测前台与后台,并妥善处理日志。

总结

WordPress WP_DEBUG 的价值不是把错误全部展示出来,而是把一次模糊的“网站坏了”变成有时间、文件路径、错误类型和复现步骤的证据。生产站临时排障时,关键组合是开启调试与日志、关闭前台显示,并控制使用时间。

真正需要避免的是长期带着调试配置运行、公开保存 debug.log、看到插件路径就直接定责,以及没有备份就改配置。把检查、复现、定位、关闭和复测连成一条流程,日志才会帮助排障,而不是制造新的安全问题。

参考资料:WordPress Developer Resources《Debugging in WordPress》WordPress Developer Resources《wp_debug_mode()》WordPress Developer Resources《wp-config.php》(访问日期:2026 年 8 月 14 日)

数臻源码猫咪图标
目录
数臻源码猫咪图标

目录

标签云: