thinkphp6迁移后旧缓存未清干净会导致路由解析失败、配置为空、模板不更新及class not found等错误,根本原因是runtime目录下残留的temp/view/data等编译文件仍被require,而新环境路径、驱动或php版本已变;须分层清理runtime/cache/、runtime/view/、runtime/temp/、runtime/data/等内容,保留目录结构,再强制刷新redis缓存、重建路由与配置缓存,并检查php版本及opcache干扰。

ThinkPHP6项目迁移后旧缓存没清干净,会导致路由解析失败、配置加载为空、模板不更新甚至Class not found等错误,根本原因是runtime目录下残留的编译文件仍在被require,而新环境的路径、驱动或PHP版本已变化。
确认残留缓存位置并分层清理
进入项目根目录,执行以下命令逐级清理,【不要直接rm -rf runtime/】——Runtime下可能有正在写入的日志锁文件,暴力清空会引发下次请求卡死或500错误。
先清运行时缓存:rm -f runtime/cache/* runtime/log/*
再清模板编译产物:rm -f runtime/view/*.php runtime/temp/*.php runtime/temp/thinkphp/*
最后清数据类缓存:rm -f runtime/data/route.php runtime/data/config.php runtime/data/*.php
注意:保留runtime/log/、runtime/view/等目录本身(仅清内容),防止框架启动时报“目录不存在”异常。
强制刷新Redis等外部缓存
如果项目配置了redis作为默认缓存驱动(检查config/cache.php中default => 'redis'),php think clear默认不会连接Redis执行FLUSHDB,只删本地runtime文件。
方法一:用Redis CLI手动清理(推荐)→ 进入redis-cli → SELECT 0(切换到对应db)→ KEYS "think_cache:*" → DEL key1 key2...(避免FLUSHDB误删其他业务数据)
方法二:在TP6命令行中调用缓存实例清除 → php think run "use think\facade\Cache; Cache::store('redis')->clear();"
【注意】若cache.php中配置了前缀(如'prefix' => 'myapp_'),KEYS命令必须匹配该前缀,否则查不到缓存项。
重建路由与配置缓存
第一步:生成全新路由缓存 → php think route:build
第二步:生成优化后的配置缓存 → php think optimize:config
第三步:验证路由是否生效 → php think route:list | head -10(输出应含你定义的所有规则)
这三步必须按顺序执行。跳过route:build直接optimize:config,会导致配置缓存里塞入旧路由结构,后续访问仍404。
检查PHP版本与opcache干扰
TP6要求PHP >= 7.3,但PHP 8.2+环境下若opcache未重置,会缓存旧的runtime/view/*.php编译文件,导致即使删了文件,页面仍走旧逻辑。
临时禁用opcache:修改php.ini → opcache.enable=0 → 重启PHP-FPM或Apache
或一键清除opcache:php -r "opcache_reset();"
Web服务器层也要检查:Nginx/Apache是否启用了静态资源强缓存(如ETag、Last-Modified),可临时加header("Cache-Control: no-cache");调试。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











