ThinkPHP 3.2 彻底禁用缓存需多层覆盖:启用调试模式(APP_DEBUG=>true),关闭模板、动作、静态、字段缓存,并设数据缓存时间为0,辅以运行时清空Runtime目录及实测验证。

ThinkPHP 3.2 要彻底禁用缓存,核心思路是**关闭所有缓存类型(模板、数据、行为、静态、查询)并配合调试模式启用**。不是只改一两个配置就能生效,必须多层覆盖,否则仍可能残留某类缓存导致开发时“改了不生效”。
全局配置文件中统一关闭
在 application/config.php(或模块级 config.php)中,集中设置以下关键项:
- 'APP_DEBUG' => true —— 启用调试模式,框架会自动禁用大部分缓存(最基础且有效的一步)
- 'TMPL_CACHE_ON' => false —— 关闭模板编译缓存,每次访问都重新解析模板
- 'ACTION_CACHE_ON' => false —— 禁用控制器动作缓存(避免 action 层被缓存)
- 'HTML_CACHE_ON' => false —— 关闭静态页面缓存(如 .html 页面生成)
- 'DB_FIELD_CACHE' => false —— 关闭数据库字段缓存(防止模型字段结构不更新)
- 'DATA_CACHE_TIME' => 0 —— 将数据缓存默认有效期设为 0(即不缓存),配合 'DATA_CACHE_TYPE' => 'File' 使用更稳妥
模板引擎单独强化禁用
仅靠 TMPL_CACHE_ON=false 有时不够,尤其在复杂模板嵌套下。建议再补充:
- 在相同 config.php 中添加:'template' => ['cache' => false]
- 确保 RUNTIME_PATH . 'temp/' 目录可写,且每次请求都会重建(禁用后该目录内容应频繁变动或为空)
运行时动态清空 + 防止意外缓存
即使配置已关,旧缓存文件仍可能残留。推荐在入口或调试页加临时清理逻辑:
立即学习“PHP免费学习笔记(深入)”;
- 在控制器中写一个清除方法(如
public function clearCache()): - 调用
del_dir(RUNTIME_PATH)(需自行实现递归删除函数)或直接rrmdir(RUNTIME_PATH) - 或使用框架内置方式:
S('')->clear();清空所有 S 缓存;cache(false);清空系统缓存(需确认 cache 函数已定义)
验证是否真正关闭
改完配置后,务必实测验证:
- 修改一个模板文件,刷新页面看是否立即生效(不重启服务)
- 在控制器中
dump(C('DB_FIELD_CACHE'));确认输出为false - 检查 Runtime/Cache/ 和 Runtime/Temp/ 目录,正常情况下访问几次后不应持续生成新缓存文件
- 查看响应头,确认无
X-Powered-By: ThinkPHP外的缓存头干扰(如Cache-Control: public, max-age=3600)



















