TP6视图缓存未更新是因为runtime/view/下编译文件未变,PHP直接执行旧文件而跳过模板解析;修复需清得准(删整个view目录)、关得稳(禁用缓存或设cache_time=0)、配得对(检查strip_space和compile_type)。

TP6 视图缓存没更新,本质是 runtime/view/ 下的编译文件没变,PHP 直接执行旧 PHP 文件,跳过了模板解析流程。修复不靠猜,关键在清得准、关得稳、配得对。
一、立即生效:手动清除视图缓存目录
这是最直接、100%有效的临时方案,适合开发调试阶段:
- Linux/macOS 终端执行:
rm -rf runtime/view/ - Windows CMD 执行:
rd /s /q runtime\view - ⚠️ 注意:必须删整个
view/目录,不能只删*.php—— 编译文件按模板路径哈希散列在多层子目录中,通配符根本匹配不全 - 权限提醒:若 Web 服务(如 nginx)与 CLI 用户不同(如 www-data vs root),建议统一用 Web 用户执行,避免后续生成失败:
sudo -u www-data rm -rf runtime/view/
二、一劳永逸:关闭模板缓存或启用强制检测
开发阶段不该依赖“手动删”,应让框架自动响应模板改动:
- 在
config/template.php中设:'cache' => false—— 彻底禁用模板缓存,改完即生效 - 或保留缓存但强制校验源文件时间戳:
'cache_time' => 0(注意不是null或0字符串,是整数0) - 该配置下,ThinkPHP 每次都会对比模板文件的
mtime,有改动就重新编译,兼顾调试体验与轻量缓存逻辑
三、代码级自动清理(控制器或命令中调用)
适合封装为后台“刷新视图”按钮,或部署脚本中集成:
- TP6 推荐写法(安全、可移植):
use think\facade\Env;<br>use think\helper\Dir;<br>Dir::delete(Env::get('runtime_path') . 'view'); - 不推荐直接用原生
rrmdir()或unlink()—— 容易误删或权限异常 - ⚠️ 生产环境慎用:避免在高频请求中触发,防止并发删除导致
view/目录短暂缺失而报错
四、验证是否真正修复
别只看页面变了,要确认底层机制已生效:
- 检查
runtime/view/是否为空目录,且后续首次访问时能自动生成新文件 - 打开
config/template.php,确认'strip_space' => false和'compile_type' => 'file'已启用,这样生成的缓存 PHP 文件可读,便于排查编译结果 - 修改一个模板后,直接查看对应
runtime/view/xxx/xxx.php文件的最后修改时间,应与你保存模板的时间一致

















