模板缓存不更新的根本原因是 runtime/view/ 下的编译文件未清除或未重生成,需精准清理 view 目录并确认 template.php 或 view.php 中 cache 配置是否启用、cache_time 是否为 0,tp6.1+ 用 php think clear:template,tp5 需手动删除 runtime/view/ 全部内容(保留目录本身)。

模板缓存不更新,本质是 runtime/view/ 下的编译文件没被清除或没被重新生成,导致 PHP 直接执行旧缓存而非解析新模板。清理不能只靠“php think clear”,必须精准针对 view 目录和相关配置。
确认是否真启用了模板缓存
先检查 config/template.php(TP6)或 config/view.php(TP5)中是否开启缓存:
- 若 'cache' => false,则根本不会生成 runtime/view/ 文件,删它也没用
- 若 'cache_time' => 0,表示启用“按源文件修改时间判断”,改模板后会自动重编译——此时不需手动清,但要确保 Web 服务器能读取模板文件 mtime
- TP6 支持 'realpath' => true,可避免软链接或相对路径导致的缓存误判,建议开启
命令行快速清理(推荐开发环境)
进入项目根目录执行对应命令,注意版本差异:
- TP6.1+:直接运行 php think clear:template
- TP6.0:用 php think clear --template
- TP5.x:无内置模板清理命令,只能手动删或写脚本
- 想一并清路由缓存(防 404),再补一句:php think route:clear
手动删除 runtime/view/ 的正确方式
这是最通用、最可靠的方法,适用于所有版本及无 CLI 权限场景:
- 定位到 runtime/view/ 目录(不是 runtime/ 下其他子目录)
- 删除该目录下全部内容(包括所有子文件夹和 .php 文件),但保留 view/ 文件夹本身
- Linux/macOS 终端:执行 rm -rf runtime/view/*(注意末尾星号)
- Windows CMD:执行 rd /s /q runtime\view && mkdir runtime\view
- 切勿只删 *.php —— 模板缓存按路径哈希分目录,通配符无法覆盖深层结构
代码中动态触发(仅限调试或部署脚本)
在控制器或命令行类里加入逻辑,适合集成进后台“一键清理”功能:
- TP6.1+ 可调用:think\facade\Cache::store('file')->delete('template_cache');
- 更稳妥的做法是拼路径后删除目录:think\helper\Dir::delete(Env::get('runtime_path') . 'view');
- TP5 需自行实现递归删除,或使用原生 rrmdir() 函数,注意别误删 runtime/ 根目录下的 .gitignore 或 config/
- 严禁在用户请求中执行全量删除操作,可能引发并发写入冲突或服务短暂中断
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











