APP_DEBUG=true是开启调试模式并禁用所有缓存的唯一正确方式,须在入口文件首行define且早于框架加载;改配置文件无效,还需清Runtime目录并验证改动实时生效。

在 ThinkPHP 3.2 中,APP_DEBUG 不是“关闭缓存”的开关,而是决定是否启用缓存的总闸门:设为 true 时,框架主动禁用所有运行时缓存(包括编译缓存、字段缓存、模板缓存等);设为 false 且满足条件时,才可能生成并加载编译缓存。所以,“通过 APP_DEBUG 关闭缓存”本质就是开启调试模式。
入口文件中正确开启调试模式(即禁用缓存)
必须在加载框架前定义,且位置严格:
- 打开项目入口文件(通常是
index.php) - 确保第一行有效 PHP 代码就是:
define('APP_DEBUG', true); - 该行必须出现在
require './ThinkPHP/ThinkPHP.php';或任何require/include语句之前 - 若已有
define('APP_DEBUG', false);,直接改为true即可
开启后缓存被禁用的关键表现
不是手动“清缓存”,而是框架自动跳过缓存逻辑:
-
Runtime/~runtime.php文件不会生成(或访问时被自动删除) - 每次请求都会重新解析配置、加载类、检查模板路径,不复用上次结果
- 字段缓存(如模型的
getField结果)、路由缓存、模板编译缓存全部失效 - 错误信息显示完整堆栈,TRACE 面板可启用(需额外配置
'SHOW_PAGE_TRACE'=>true)
配套操作确保缓存真正不生效
仅改 APP_DEBUG 不够,还需清理残留和验证:
- 手动删除整个
Runtime/目录(含子目录和所有文件) - 检查是否误启了其他缓存机制,例如在配置中设置了
'DB_FIELDS_CACHE'=>true,可在调试模式下显式关掉 - 刷新页面后,查看响应头或日志,确认没有
require RUNTIME_FILE类似行为 - 修改一个控制器方法,不重启服务直接刷新——如果改动立即生效,说明缓存已禁用
为什么不能只靠配置文件改?
APP_DEBUG 是常量,由 define() 在运行初期硬性定义,框架底层多处用 if(!APP_DEBUG) { ... } 判断分支。它不走配置系统(C函数)读取,所以在 Conf/config.php 或 Conf/debug.php 里设置 'app_debug'=>true 对 3.2 版本完全无效。

















