ThinkPHP静态缓存生效需同时满足'HTML_CACHE_ON'=>true与正确配置'HTML_CACHE_RULES',过期由'HTML_CACHE_TIME'(秒)控制,路径由HTML_DIR决定,清理须手动删除Html/目录文件。

ThinkPHP静态文件缓存(即HTML静态缓存)的过期控制与清理,关键在于两件事:一是让缓存按设定时间自动失效,二是手动或自动清除已生成但未过期的旧缓存。配置生效的前提是路径、开关和规则三者匹配,否则改了也白改。
确认静态缓存是否真正开启
静态缓存依赖两个硬性条件同时满足:
-
全局开关打开:在项目主配置文件(如
config.php或模块级Conf/config.php)中必须设置'HTML_CACHE_ON' => true; -
缓存规则存在:需通过
'HTML_CACHE_RULES'明确指定哪些控制器/方法启用静态缓存,例如'Index:index' => '{:module}/{:controller}_{:action}'; - 若只开开关没配规则,或规则格式错误(如键名写成
index/index而非Index:index),缓存不会生成,自然谈不上过期。
设置缓存有效期与存放路径
静态缓存的过期时间由 'HTML_CACHE_TIME' 控制,单位为秒,不是分钟也不是小时:
- 设为
60表示缓存保留 1 分钟;设为3600表示 1 小时;设为0则不生成静态缓存文件; - 缓存文件实际保存路径由
HTML_PATH决定,但它不是直接读取配置项,而是由APP_PATH . '/' . HTML_DIR . '/'拼接而成; - 要修改路径,应修改
HTML_DIR常量(通常在core.php或paths.php中定义),而非仅改配置里的HTML_PATH; - 修改后务必清空
Runtime/目录,否则旧路径可能被缓存引用。
手动清理已生成的静态缓存文件
ThinkPHP 不提供内置命令一键清空 HTML 静态缓存,需主动操作:
立即学习“PHP免费学习笔记(深入)”;
- 进入项目根目录下的
Html/文件夹(即HTML_DIR对应目录),删除全部子文件和子目录; - 如果使用了自定义规则生成多层结构(如
Index/index_123.shtml),建议用脚本批量清理:find Html/ -name "*.shtml" -delete; - 注意:删除后首次访问对应页面会重新生成缓存,可能略有延迟;
- 不要只删
Runtime/,它不影响已生成的 HTML 文件——那是模板编译缓存的位置。
避免缓存“假过期”的常见陷阱
即使设置了 HTML_CACHE_TIME => 60,仍可能发现页面长期不更新,原因常出在以下环节:
- 服务器时间不准,导致文件修改时间戳异常,影响过期判断;
- 静态文件后缀名(
HTML_FILE_SUFFIX)配置与 Nginx/Apache 的 MIME 类型处理冲突,造成浏览器强缓存覆盖服务端逻辑; - 前端通过 AJAX 加载内容,而静态缓存只作用于完整页面输出,局部刷新不受影响;
- 开发环境开启
APP_DEBUG => true,框架会跳过静态缓存逻辑,上线后却忘了关调试模式。



















