当前位置: 首页 > news >正文

ThinkPHP 模板引擎编译缓存如何清理避免页面显示旧数据?

ThinkPHP 模板引擎编译缓存如何清理避免页面显示旧数据?

核心结论:ThinkPHP 模板缓存不更新的主因是 template.cache_expire 默认值为 60 秒,开发阶段必须设为 0 才能实时生效。

原因分析

ThinkPHP 模板缓存机制分为两层:Runtime/Cache 下的 PHP 编译文件和 Runtime/Temp 里的模板哈希映射表 (template_*.php)。只清 Cache 目录而保留 Temp 目录时,框架会认为模板未变化,继续执行已损坏的缓存文件。模板缓存是否重新编译取决于两个条件:源模板文件修改时间是否晚于缓存文件,以及 template.cache_expire 是否为 0 或负数。只要这个值大于 0(默认 60),即使模板改了,缓存也会强制沿用 60 秒。

解决方案

方案一:修改配置文件禁用缓存(开发环境推荐)

在 config/app.php 中设置 'html_cache_on' => false,在 config/template.php 中设置 'template.cache_expire' => 0(注意是数字 0,不是字符串'0')。若只在开发环境禁用,可用条件判断:'html_cache_on' => app()->isDebug()。此方法适用于 ThinkPHP 5.1+ 及 6+ 版本。

方案二:手动清理缓存目录

必须同时删除 Runtime/Cache 和 Runtime/Temp 两个目录。ThinkPHP 6+ 的缓存文件默认存于 runtime/cache/(单应用)或 runtime/应用名/cache/(多应用)。清理时仅删除 cache/ 子目录,避免误删 log/、temp/ 等关键目录。命令行操作可在项目根目录执行:php think clear 或 php think cache:clear –type=file。

方案三:代码方式清除缓存

在控制器中添加以下代码:\think\facade\Cache::clear('temp') 清除编译缓存,\think\facade\Cache::clear('cache') 清除数据缓存。若使用缓存标签,可按标签清除:\think\facade\Cache::tag('user_data')->clear()。ThinkPHP 5.0 可创建 cache 控制器,调用 Cache::clear() 方法。

方案四:处理 HTML 静态缓存

很多人改了模板文件页面却没变,实际是 HTML 静态缓存拦截请求。检查方法:直接访问带参数的 URL(如/index/index?x=1),如果这次变了而/index/index 不变,基本就是 html 缓存生效。需同时清理 runtime/html/目录,该路径默认不随 php think clear 命令清理。

注意事项

1. 不要直接删除整个 runtime/目录,该目录包含日志文件、模板编译缓存、路由缓存等,误删会导致应用启动报错或抛出模板找不到异常。

2. 模型查询缓存与模板缓存是两回事,Cache::clear() 对模型查询缓存无效,因其缓存键仅含类名、方法名和 SQL 模板,不包含条件值且未打标。需改用 Db::name('user')->where()->cache('user_list_status_1', 3600)->select() 显式传入带业务语义的缓存键。

ThinkPHP 模板引擎编译缓存如何清理避免页面显示旧数据?

3. Linux 下要注意文件系统时间精度(如 ext4 默认 1 秒),快速连续保存可能被判定为未更新,可加 touch 命令强制刷新时间戳。

4. PHP 的 opcache 会缓存已编译的 PHP 文件(包括 ThinkPHP 生成的 runtime/view/*.php),Nginx/Apache 也可能返回 304 或本地强缓存,此时清 runtime/目录无效,需重启 PHP-FPM 或清除 opcache。

5. 字段结构缓存存在 runtime/schema/或 runtime/temp/下,删完要再跑一次\think\facade\Db::clearCache() 才真正刷新。

参考来源

来源:ThinkPHP 官方技术文档 - 模板引擎编译缓存机制说明(2026 年 4 月 9 日发布)

来源:ThinkPHP 开发者社区 - 模板缓存不刷新问题汇总(2026 年 3 月 24 日发布)

来源:GitHub ThinkPHP Issues - 缓存清理命令优化讨论(2026 年 4 月 16 日收录)

来源:CSDN 技术博客 - ThinkPHP5.0 清除缓存、模版缓存和日志缓存的方法(截至 2023 年 7 月 16 日)

原文链接:https://www.zjcp.cc/ask/9572.html

http://www.jsqmd.com/news/752537/

相关文章:

  • 2025届最火的六大降重复率网站推荐榜单
  • 嵌入式安全必修课:搞懂SRAM的ECC,别让你的车规MCU在关键时刻‘掉链子’
  • 免费的小红书去水印工具效果最好?2026最新年强烈推荐 - 爱上科技热点
  • AppleRa1n:解锁iOS设备激活锁的实用指南
  • LeetCode 18.四数之和
  • 最新媒体新闻稿发稿平台有哪些?如何选择最适合的发布渠道? - 代码非世界
  • 长期使用中感受到的 Taotoken 服务稳定性与开发者支持
  • WarcraftHelper终极指南:三步快速提升魔兽争霸III游戏体验
  • ARM调试寄存器OSLSR与OSSRR深度解析
  • Sunshine游戏串流:5步搭建你的个人云游戏服务器终极指南
  • 视频去水印免费工具怎么选?2026最新实测优缺点对比,视频去水印免费推荐 - 爱上科技热点
  • 体验快速接入如何在五分钟内让应用拥有 AI 能力
  • 5分钟快速掌握ComfyUI Manager:AI插件管理终极指南
  • GD32H759I的SRAM怎么分?手把手教你配置ITCM/DTCM提升代码性能
  • 即梦去水印方法有哪些?即梦AI图片和视频怎么去掉水印?2026最新实测教程整理 - 爱上科技热点
  • 如何用OpenDroneMap快速将无人机照片转为精准3D模型?新手完全指南
  • 即梦AI视频怎么去水印?2026最新去水印教程+工具推荐,会员无水印导出也说清了 - 爱上科技热点
  • Advanced Sessions Plugin:虚幻引擎会话管理插件终极指南
  • 具身智能(34):ROS2工具集合
  • 突破显存限制:ComfyUI-WanVideoWrapper实现1025帧长视频生成的实战指南
  • ArcGIS Pro和ArcMap数据裁剪对比:以城市绿地提取为例,我为什么推荐新工具
  • TrollInstallerX 终极安装指南:如何在 iOS 14.0-16.6.1 上轻松安装 TrollStore
  • 豆包视频怎么去水印?2026最新 豆包视频去水印方法 + 豆包视频去水印官方规定解读 - 爱上科技热点
  • 全球仅5份的《高频交易低延迟内存架构规范V2.6》中文解读(含内存池与FPGA协处理器共享零拷贝区设计细节)
  • 4399游戏平台开发技术栈拆解
  • 高效NPK文件处理工具:专业级游戏资源编辑器使用指南
  • 3步搞定AI语音转换:零基础也能玩转RVC变声神器
  • 从零开始掌握lxml.html解析:手把手教你用html.fromstring打造高效爬虫
  • 大华网络硬盘录像机dh-nvr1104hs升级
  • .NET 9容器配置实战手册(Kubernetes+Docker+Minimal Hosting三合一)