核心原因是模板缓存(runtime/view/)未被php think clear清理,且存在浏览器、opcache或服务器代理等多层缓存干扰;需手动删runtime/view/、禁用模板缓存或设cache_time=>0,并逐层排查外层缓存。

ThinkPHP 7.0 缓存清理后模板仍不更新,核心原因不是“没清干净”,而是模板缓存(runtime/view/)和编译缓存(runtime/temp/)被默认忽略,同时浏览器、OPcache 或服务器代理层可能还在返回旧内容。解决需分层排查,不能只依赖 php think clear。
确认是否真清了模板缓存
TP7.0 的 php think clear 默认只清 runtime/cache/、runtime/log/ 和 runtime/temp/(编译缓存),但不清理 runtime/view/(模板缓存)——这是最常见误判点。
- 手动删除整个
runtime/view/目录:Linux/macOS 执行rm -rf runtime/view/,Windows CMD 执行rd /s /q runtime\view - 别只删
runtime/view/*.php:模板文件按路径哈希分散在多层子目录中,通配符无法覆盖 - TP7.0 尚未内置
php think clear:template(该命令从 TP6.1 起支持,TP7.0 未升级此子命令),所以必须手动删或写脚本
开发阶段让模板自动响应修改
反复删目录太低效,开发时应关闭模板缓存逻辑,而非靠清理补救:
- 在
config/template.php中设'cache' => false,彻底禁用模板编译缓存 - 或保留缓存但强制检查源文件:设
'cache_time' => 0,TP7.0 会每次对比模板文件的最后修改时间(mtime),有改动即重编译 - 避免使用
strip_space => true或压缩输出,否则编译后的 PHP 文件难调试,出错时不易定位
排除其他层级缓存干扰
即使 TP 层缓存已清,页面仍可能卡在更外层:
-
浏览器缓存:按
Ctrl+F5强制刷新,或访问时加时间戳参数(如?v=123);检查响应头是否有Cache-Control: public, max-age=3600 -
OPcache:TP7.0 运行于 PHP 8.1+ 时默认启用 OPcache;确认
opcache.validate_timestamps = 1,否则需执行opcache_reset()或重启 PHP-FPM - Web 服务器缓存:若用 Nginx fastcgi_cache 或 Apache mod_cache,需发送 PURGE 请求或临时禁用相关配置再测试
验证模板是否真正生效
不要只看页面渲染结果,要确认模板引擎是否真的加载了新内容:
- 打开任意一个模板文件(如
index.html),在开头加一行{:time()}或<!-- {php}echo time();{/php} -->,保存后刷新——如果时间没变,说明模板根本没重读 - 查看
runtime/view/下是否生成了新哈希目录,且其中 PHP 文件的修改时间与你保存模板的时间接近 - 临时在
config/template.php中开启'debug' => true(TP7.0 支持),可暴露模板解析过程中的警告
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











