tp5.1模板缓存未更新的根源是runtime/view/未被php think clear清理,且模板引擎未检测文件改动;需手动清空runtime/view/、同步清理cache与temp目录,并配置cache_time=0或禁用缓存。

TP5.1开启模板缓存后改了视图文件却没变化,不是代码写错了,而是缓存没清干净或配置没生效。核心问题就两个:缓存路径没被正确清理,或者模板引擎根本没检测到文件改动。
模板缓存存在独立目录,php think clear 不管用
ThinkPHP 5.1 默认把编译后的模板 PHP 文件存在 runtime/view/ 目录下,而 php think clear 只清 runtime/cache/ 和 runtime/log/,完全不碰 view 目录。
- 最稳妥的做法是直接删除整个
runtime/view/:rm -rf runtime/view/(Linux/macOS)rd /s /q runtime\view(Windows CMD) - 别只删
runtime/view/*.php—— 模板按路径哈希分目录,通配符匹配不到深层文件,漏删等于白清 - 如果 Web 服务器用户(如 www-data)和 CLI 用户不同,删完建议用 Web 用户重建缓存:
sudo -u www-data php think clear
开发阶段推荐关掉自动检测或强制刷新
手动删太累,调试时更可靠的是让框架每次检查源文件是否改动:
- 在
config/template.php中设'cache' => false,彻底禁用模板缓存 - 或保留缓存但启用实时检测:
'cache' => true,'cache_time' => 0
这个组合表示缓存永不过期,但会对比模板文件的最后修改时间(mtime),有改动就重编译 - 避免用 HTML 注释包裹模板标签(如
<!-- {if $a}xxx{/if} -->),TP5.1 会解析中断,导致后续标签失效
升级或部署后必须清双缓存
TP5.1 的模板编译缓存分两层:编译结果存 runtime/Cache/,哈希映射表存 runtime/Temp/。只清 Cache 目录,Temp 里残留的旧映射会让框架继续加载损坏缓存。
- 升级 TP5.1 或更换环境后,务必同时清空:
rm -rf runtime/Cache/* runtime/Temp/* - Windows 用户请用资源管理器彻底清空这两个文件夹下的全部内容,不要只删子文件夹
- 清完再访问页面,框架会重新生成完整缓存链
确认模板路径和语法没有硬伤
缓存清完还不生效?可能是模板本身触发了静默失败:
- {if} 必须严格成对,嵌套中不能出现未转义的
{或},比如$b{0}是 PHP 7.4+ 弃用语法,会导致解析卡住 - {volist} 的属性名大小写敏感,只认
key和id,写成KEY或index会跳过整块,不报错也不输出 - 嵌套循环时,内层
name不能和外层重复,否则变量覆盖,只渲染最后一组数据











