ThinkPHP模板缓存清理不彻底的根源是误删cache/目录而未清空view/(TP6)或temp/(TP5)下的编译文件,且常忽略路由、配置及OPCache等多层缓存;正确做法是清空对应view/目录并执行route:clear、config:clear命令,开发时设template.cache_expire=0可自动响应模板变更。

ThinkPHP模板缓存清理不彻底,最常见表现是改了HTML模板但页面没变、多语言切换失效、自定义标签不解析或{volist}/{if}报错——根本原因不是没删,而是删错了位置、漏了关键目录,或缓存被其他机制(如OPCache、HTML静态缓存)二次固化。
只删 runtime/cache/ 是无效的
模板编译后的PHP文件默认存在 runtime/view/(TP6)或 runtime/temp/(TP5),和 cache/ 完全无关。清空 cache/ 目录对模板更新毫无作用。
- TP6.1+ 推荐执行:
php think clear:template - TP5 或老版本 TP6:直接删除整个目录,
rm -rf runtime/view/(Linux/macOS)或rd /s /q runtime\view(Windows) - 别只删
*.php:模板按路径哈希分目录(如runtime/view/abc123/index.html.php),通配符无法覆盖深层结构
必须同步清理路由与配置缓存
模板刷新后仍404或语言包不生效,大概率是 runtime/data/route.php 和 runtime/data/config.php 还在用旧数据。
- TP6 执行:
php think route:clear和php think config:clear - TP5 手动删除:
rm -f runtime/data/route.php runtime/data/config.php - 验证是否生效:运行
php think route:list,输出应包含你新添加的路由规则
警惕隐藏层缓存干扰
即使 runtime/view/ 已空,页面仍不更新,要检查三层“影子缓存”:
-
HTML静态缓存:检查
config/app.php中'html_cache_on' => false,开发时务必关闭 -
OPCache:PHP 编译后的
runtime/view/*.php文件可能被 OPcache 缓存,临时禁用或在php.ini中加opcache.file_exclude=".*runtime.*" -
Web服务器缓存:Nginx/Apache 可能返回 304 或强缓存,访问带参数 URL(如
/index?_t=123)测试是否真有变化
开发阶段推荐的防踩坑配置
与其反复清理,不如让缓存自动响应修改:
- 在
config/template.php中设:'cache' => true, 'cache_expire' => 0(注意是数字 0) - 确保模板路径为字面量字符串,避免
$this->fetch($module . '/index')这类动态拼接 - 语言包路径严格匹配:
app/lang/zh-cn.php,文件名小写+短横线,无BOM,首行直接<?php return [...];
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











