thinkphp 3.2 修改代码不生效主因是缓存未清尽,需清理 runtime/cache、temp、data 全目录,或临时开启 app_debug=true,亦可禁用 tmpl_cache_on、db_fields_cache 等特定缓存并验证响应头与文件生成。

修改代码不生效,大概率是缓存没清干净或没关到位。ThinkPHP 3.2 的缓存机制分好几层,光删 Runtime/Cache 不够,得逐个确认并清理。
关闭调试模式导致的模板/字段缓存残留
部署模式(APP_DEBUG = false)下,框架默认开启字段缓存和模板编译缓存。改了数据库字段或模板文件却看不到效果,是因为旧缓存还在用。
- 临时解决:入口文件 index.php 中把
define('APP_DEBUG', false);改成true,强制跳过所有缓存加载 - 长期方案:保持
APP_DEBUG = true开发,上线前再切回false;若必须用部署模式开发,需每次改完手动清空 Runtime/Cache 和 Runtime/Temp
清除 Runtime 下全部缓存文件
Runtime 目录里有多个子目录都会存缓存,只删 Cache 不行,要一并清理:
- Runtime/Cache/:模板编译、行为钩子、配置合并等缓存
-
Runtime/Temp/:模板引擎生成的中间 PHP 文件(如
~runtime.php) - Runtime/Data/:数据缓存(如果用了 SaeData、Xcache 等驱动)
- Runtime/Logs/:日志不影响运行,但大日志可能拖慢 I/O
推荐用脚本一键清空(放在项目根目录执行):
php -r "array_map('unlink', glob('./Runtime/Cache/*')); array_map('unlink', glob('./Runtime/Temp/*')); rmdir('./Runtime/Cache'); rmdir('./Runtime/Temp'); mkdir('./Runtime/Cache'); mkdir('./Runtime/Temp');"
禁用特定缓存类型(精准控制)
不想全关?可以针对性停用某类缓存:
- 关模板编译缓存:在 Application/Common/Conf/config.php 加
'TMPL_CACHE_ON' => false - 关字段缓存(改表结构后必关):加
'DB_FIELDS_CACHE' => false - 关 HTML 静态缓存:确保
'HTML_CACHE_ON' => false,并删掉 Runtime/Html/ 目录 - 关扩展配置自动加载:设
'LOAD_EXT_CONFIG' => '',避免 config_extra.php 类文件被缓存影响
验证是否真正生效
清完缓存别急着信,动手验证:
- 打开浏览器开发者工具 → Network 标签 → 刷新页面,看响应头是否有
X-Powered-By: ThinkPHP,且响应时间明显变长(说明没走缓存) - 改一个控制器里的 echo 内容,刷新页面立刻看到变化,才算成功
- 检查 Runtime/Temp/ 下有没有新生成的
~*.php文件 —— 如果有,说明模板编译缓存已重建;如果没有且页面正常,说明已跳过该环节











