ThinkPHP 6.0.7 升级到 6.1.5 属于小版本迭代,不变更目录结构或核心机制,但必须手动清空 runtime/ 目录(或执行 php think clear:all)并重建路由与配置缓存,否则将导致配置未生效、路由 404、模板渲染异常等静默问题。

ThinkPHP 6.0.7 升级到 6.1.5 属于小版本迭代,不涉及目录结构或核心机制变更,但 runtime 缓存目录的处理仍需注意兼容性与清理规范——升级本身不自动迁移或重置缓存,必须手动干预,否则可能引发配置未生效、模板编译错乱、路由缓存残留等静默问题。
缓存目录本身无需移动路径
TP6.0.7 与 TP6.1.5 默认均使用 runtime/ 目录存放缓存(含 cache/、log/、temp/、view/ 等子目录),且该路径由 RUNTIME_PATH 常量控制,默认值为 __DIR__ . '/runtime'。只要项目根目录结构未变(如仍为 app/、public/、runtime/ 同级),就不需要移动或重命名 runtime 文件夹。
常见误区是误以为要“迁移缓存目录”,实则只需确保:
- runtime/ 目录权限可写(Web 进程与 CLI 进程均有读写权限)
- runtime/ 不在 Web 可访问路径下(确认 Nginx/Apache 未将 runtime 设为 root 或 alias)
- 未在 .gitignore 中意外排除 runtime/ 子目录(如只忽略 runtime/cache 但保留 runtime/log,会导致日志写入失败)
必须清空缓存再启用新版本
TP6.1.5 对模板编译、配置解析、路由注册等环节的缓存格式做了细微优化(如 view 编译文件增加 PHP8.1 类型声明注释,config 缓存键生成逻辑微调)。若直接覆盖 vendor 并启动服务,旧缓存会继续被读取,导致:
立即学习“PHP免费学习笔记(深入)”;
- 修改了 config/database.php 但 Config::get('database.hostname') 仍返回旧值
- 新增了路由规则,但访问 404(因 route_cache.php 未更新)
- 模板中
{:url('user/list')}渲染为空(url 缓存未刷新)
正确做法是:升级前后执行双清:
- 删掉整个 runtime/ 目录(或运行
php think clear:all) - 再执行
php think optimize:route和php think optimize:config主动重建关键缓存
多环境部署时注意 runtime 分离
若项目同时跑开发、测试、生产三套环境(如通过 ENV=production 切换),TP6.1.5 支持按环境隔离缓存子目录,避免互相污染。可在 public/index.php 入口文件中调整:
// 升级后建议显式定义,而非依赖默认
define('RUNTIME_PATH', __DIR__ . '/../runtime/' . (getenv('APP_ENV') ?: 'local') . '/');
这样 runtime/local/、runtime/testing/、runtime/production/ 各自独立,升级时只需清对应环境子目录,不影响其他环境运行。



















