thinkphp 5.1 静态缓存需配置 html_cache_on、html_cache_time 和 html_path 三项参数,并在 htmls.php 中定义规则,通过 php think build:html 命令生成 html 文件,nginx 直接响应可将响应时间从 86ms 降至 3.2ms。

ThinkPHP 5.1 项目需将首页、文章页等低频更新页面固化为 HTML 文件,让 Nginx 直接响应请求、跳过 PHP 解析与框架调度,实测可将单页响应时间从 86ms 压至 3.2ms,且避免因数据库抖动导致前台白屏。
启用静态缓存开关与全局配置
打开 application/config.php,确认以下三项已设置:
① 【'HTML_CACHE_ON' => true】 —— 必须开启,否则所有规则无效;
② 【'HTML_CACHE_TIME' => 7200】 —— 设为 7200(2 小时),避免设为 0 导致永久缓存无法自动失效;
③ 'HTML_PATH' => '../public/static/html/' —— 路径必须以斜杠结尾,且该目录需对 Web 进程可写(如 nginx 用户有写权限)。
若未配置 HTML_PATH,系统默认写入 runtime/html/,但该路径无法被 Nginx 直接访问,会导致静态页生成成功却始终 404。
定义静态缓存规则
在 application/config/htmls.php 中返回规则数组,支持三种写法:
方法一:模块+操作粒度控制(推荐)
【'portal:article' => ['Article/{id}', 3600]】 —— 仅对 portal 模块的 article 操作生效,生成路径为 public/static/html/Article/123.html,有效期 1 小时;
方法二:通配符全局覆盖
'*' => ['{$_SERVER.REQUEST_URI|md5}', -1] —— 所有 GET 请求均缓存,文件名用 URI 的 md5 值,-1 表示永久缓存(上线后需手动清理);
方法三:按控制器统一管理
'Index:' => 'Index/{:action}_{id}' —— Index 控制器下所有操作(如 index、detail)都按此规则生成文件名,注意冒号后不能有空格。
⚠️ 规则中出现 / 字符会自动创建子目录,但路径层级不宜超过 3 层,否则 Nginx location 匹配易出错。
生成静态页面文件
命令行进入项目根目录,执行:
php think build:html portal/article → 生成 portal 模块 article 操作对应的 HTML 文件;
php think build:html * → 强制触发全部已配置规则的静态页生成(含已存在文件也会重写);
php think build:html Index/index → 生成 Index 模块 index 操作的静态页,文件名为 Index/index.html。
这一步必须在关闭调试模式(app_debug = false)下运行,否则模板中 Notice 级错误会中断输出缓冲,导致生成空文件。
验证静态页是否生效
直接访问对应 URL(如 /portal/article/123),观察响应头:
若返回 X-Powered-By: ThinkPHP,说明仍走 PHP 流程,静态未命中;
若返回 X-Powered-By: nginx 且无 PHP 相关 header,说明 Nginx 已直出 static/html 下的 HTML 文件;
检查 public/static/html/ 目录下是否存在对应路径文件,不存在则规则未匹配或控制器方法中用了 redirect() 或 exit。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











