thinkphp 3.2 关闭缓存需同步关闭编译、模板、html、动作、数据等多层缓存,并确保 app_debug=false、无部署模式干扰、runtime 目录可写且已清空,同时排查行为钩子与第三方插件缓存逻辑。

ThinkPHP 3.2 关闭缓存后仍有缓存表现,通常不是“关不掉”,而是多个缓存层级未同步关闭,或配置未真正生效。关键在于区分类型:编译缓存、模板缓存、HTML静态缓存、数据缓存、行为钩子缓存——它们各自独立,需分别处理。
确认 APP_DEBUG 已彻底关闭且部署模式未干扰
APP_DEBUG 是硬性开关:只要为 true,所有编译类缓存(如 ~runtime.php)自动禁用;但若设为 false 却未配好部署模式,反而会触发编译缓存加载,导致“关了还快”——误以为有缓存。务必检查入口文件 index.php 中:
- 是否存在
define('APP_DEBUG', false);—— 必须存在且值为 false - 是否误加了
define('APP_MODE', 'deploy');—— 部署模式会强制生成并加载编译缓存,与“关闭缓存”目标冲突,应删除或注释该行 - 确认没有在其他配置文件(如 Common/conf/config.php)中通过
C('APP_DEBUG', true)动态覆盖
逐层关闭各类缓存开关
ThinkPHP 3.2 的缓存是模块化设计,需显式关闭每一类:
-
模板编译缓存:在项目配置(如 Application/Common/Conf/config.php)中添加
'TMPL_CACHE_ON' => false -
HTML 静态缓存:添加
'HTML_CACHE_ON' => false,并在 404 或动态页面控制器开头加C('HTML_CACHE_ON', false);防止漏掉 -
动作缓存(Action Cache):添加
'ACTION_CACHE_ON' => false -
数据缓存(File/Db等):设置
'DATA_CACHE_TYPE' => ''或null可禁用驱动;或直接设'DATA_CACHE_TIME' => 0 -
外部配置加载:添加
'LOAD_EXT_CONFIG' => '',避免因加载额外配置触发隐式缓存逻辑
清空残留缓存文件并验证路径权限
即使配置关闭,旧缓存文件仍可能被读取。必须手动清理并确保框架不再写入:
- 删除
RUNTIME_PATH下全部内容(即Application/Runtime/目录),尤其注意:
–Runtime/Temp/(模板编译产物)
–Runtime/Cache/(数据缓存)
–Runtime/common~runtime.php或~Application/Conf/~runtime.php(编译缓存主体) - 确认 Web 进程用户对
Application/Runtime/有写权限(Linux 执行chmod -R 755 Application/Runtime,Windows 检查目录属性“安全”选项卡) - 临时在 index.php 顶部加一行:
var_dump(is_writable(RUNTIME_PATH)); exit;
输出bool(true)才算真正可写
检查是否被行为钩子或扩展干扰
某些第三方插件、自定义 Behavior、或 tags.php 中注册的钩子可能自带缓存逻辑,绕过常规配置:
- 打开
Application/Common/Conf/tags.php,清空内容或重命名为tags.php.bak临时禁用所有行为 - 检查是否有自定义的
AppBegin、ViewBegin等钩子中调用了S()、cache()或设置了 HTML 缓存 - 搜索整个项目代码,查找
html_cache、buildHtml、html_index等关键词,排查手动触发静态缓存的位置
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











