ThinkPHP 6 清缓存必须用 php think clear,它统一触发路由、配置等分层清理;手动删 runtime 目录易漏缓存或导致类未重生成;TP5.1 需开启 APP_DEBUG 才生效。

thinkphp6 命令行清空缓存必须用 php think clear
直接删 runtime 目录看似快,但 ThinkPHP 6 的缓存分层(路由、配置、模板、事件等)依赖命令统一触发清理逻辑。手动删可能漏掉 config.php 缓存或导致下一次请求报 Class not found —— 因为某些类映射缓存没被重生成。
实操建议:
立即学习“PHP免费学习笔记(深入)”;
-
php think clear是唯一推荐方式;它会依次调用clear:route、clear:config、clear:cache等子命令 - 如果只想清某类缓存,可用
php think clear:route或php think clear:config,但注意:部分子命令在非调试模式下默认禁用 - CI/CD 脚本里加
--force参数绕过确认提示:php think clear --force
tp5.1 清缓存要区分环境,APP_DEBUG 关闭时 clear 命令无效
ThinkPHP 5.1 的 clear 命令底层检查 APP_DEBUG === true 才允许执行,否则直接跳过——不是报错,而是静默忽略。你敲了命令却看到 runtime 里文件还在,大概率是这个原因。
实操建议:
立即学习“PHP免费学习笔记(深入)”;
- 先确认当前环境:查
app.php或.env中APP_DEBUG值;生产环境务必设为false,但清缓存得临时改成true再运行命令 - 不想改配置?用 PHP 直接调用:
think\Cache::clear(),但注意这只会清数据缓存,不碰模板和路由 - 模板缓存(
view目录下 .php 文件)需额外删runtime/view,clear命令默认不处理它
自定义清缓存脚本别硬编码路径,用 Env::get('runtime_path')
有人写个 shell 脚本直接 rm -rf runtime/cache,结果上线后因部署路径不同(比如 Docker 挂载到 /data/runtime),缓存清成了别的项目目录。
实操建议:
立即学习“PHP免费学习笔记(深入)”;
- 所有路径读取必须走框架接口:
Env::get('runtime_path')(TP6)或Config::get('app.runtime_path')(TP5) - 若需在命令行外清缓存(比如 API 触发),封装一个
ClearService类,内部调用Cache::clear()+File::deleteDir(),并校验当前是否为 CLI 环境(避免被前端误调) - 不要用
__DIR__ . '/../runtime'这种写法——Composer 安装位置变动时路径就断了
清缓存后模板不更新?检查 template.cache_expire 和 view_replace_str
清完缓存发现页面还是旧的,尤其用了 {:url('index')} 这类标签,问题常出在两处:一是模板编译缓存没真正失效,二是 URL 替换规则被缓存固化了。
实操建议:
立即学习“PHP免费学习笔记(深入)”;
- 确认
template.cache_expire配置值:设为0表示每次检查修改时间,设为-1才强制不缓存;默认是60秒,清缓存后仍可能沿用旧编译文件 -
view_replace_str的替换规则在模板编译时被写进缓存文件,清缓存后需重启 Web 服务(如 Nginx + PHP-FPM)才能彻底刷新,否则{__STATIC__}还指向老路径 - 调试时可在模板里加
{:date('Y-m-d H:i:s', filemtime(THINK_PATH))},验证是否真加载了新编译文件
缓存机制越深,清得越要“按规矩来”。跳过命令、绕过环境判断、硬写路径,三者任一踩中,后面排查花的时间远超多敲那几个字。



















