ThinkPHP5开启Trace调试需在入口文件首行定义APP_DEBUG=true并显式配置app_trace=true,同时清空runtime缓存,否则右下角图标与面板不显示。

ThinkPHP5 页面 Trace 调试功能不会自动开启,仅靠 APP_DEBUG = true 不够,必须显式启用 app_trace 配置并清空缓存,否则右下角图标和面板完全不出现。
入口文件必须第一行定义 APP_DEBUG
TP5 的调试开关只认入口文件(项目根目录下的 index.php)最顶部的 define('APP_DEBUG', true),且必须紧贴 <?php 后、前面不能有空行/BOM/注释/输出:
- ✅ 正确写法:
<?php define('APP_DEBUG', true); require __DIR__ . '/thinkphp/start.php'; - ❌ 错误写法:放在
require之后、用字符串'true'、大小写写成app_debug、或被 BOM 编码干扰 - 即使
.env或config.php里写了app_debug => true,只要入口没这行,Trace 就不会初始化 - 改完后必须手动删掉整个
runtime/目录(含子目录和隐藏的~runtime.php),否则旧缓存会掩盖新配置
application/config.php 中必须设 app_trace => true
TP5 的页面 Trace 是独立开关,由 app_trace 控制,不是 APP_DEBUG 的子集。它默认是 false,不手动打开就不会渲染右下角图标和面板:
- 打开
application/config.php,找到'app_trace' => false这一行,改为:'app_trace' => true - 如果该键不存在,直接在配置数组里加这一项(位置不限,但建议靠近顶部)
- 注意:
SHOW_PAGE_TRACE是 TP3 的旧参数,TP5 已废弃,写它无效 - 这个配置只在
APP_DEBUG === true时才真正生效;单独设app_trace => true但入口没开APP_DEBUG,依然没反应
为什么开了还是没图标?检查 PHP 底层错误输出
TP5 不会自动开启 PHP 的错误显示机制,哪怕 Trace 配置全对,若 display_errors 关闭,页面可能白屏或 500,根本看不到图标:
立即学习“PHP免费学习笔记(深入)”;
- 在
index.php顶部、define('APP_DEBUG', true)后立刻加:ini_set('display_errors', '1'); - 确认 php.ini 中
error_reporting至少为E_ALL(TP5 默认依赖此设置) - 如果你用 Nginx + PHP-FPM,检查
fastcgi_intercept_errors off;,否则 Nginx 会吞掉 ThinkPHP 渲染的 Trace HTML 和错误页 - 刷新页面后,右下角出现灰色 ThinkPHP LOGO 图标,且可点击展开「基本、SQL、错误、调试」等选项卡,才算真正就绪
trace() 函数能用,但只在页面 Trace 开启后才可见
你在控制器里调用 trace('hello') 或 trace($data, 'my_data') 是有效的,但这些数据不会自动弹窗或打印——它们只注入到 Trace 面板的「调试」选项卡中:
- 确保前面三步都已正确完成,否则
trace()调用会被静默丢弃 - 「调试」选项卡默认存在,无需额外配置;如需自定义其他选项卡(比如「API」),得改
trace_tabs数组,但 TP5 原生不支持该扩展,需自行钩子或升级到 TP6+ - 返回 JSON 或 AJAX 请求时,Trace 面板不会出现(因为不是 HTML 响应),此时应改用
type => 'console'配置,但 TP5 不原生支持该 type,强行设会报错
最容易被忽略的是:TP5 的 app_trace 和 APP_DEBUG 是两个硬性开关,缺一不可;而 runtime 缓存清不干净,会让所有配置形同虚设——哪怕你改了十次 config.php,只要 runtime/ 里还躺着旧的 ~runtime.php,框架就继续按老规则跑。



















