thinkphp文件缓存清理需分场景:默认php think clear仅清cache/log/session/trace,漏view/和route.php;模板缓存须用php think clear:template或手动删runtime/view/,路由缓存需php think route:clear或删runtime/route.php,配置与字段缓存须分别重建或调用db::clearcache()。

ThinkPHP 的文件缓存清理不能只靠“删文件”或“一键清空”,关键在于分清清什么、怎么清、什么时候清。默认的 php think clear 命令只清四个子目录(cache/、log/、session/、trace/),漏掉 view/(模板缓存)和 route.php(路由缓存),这是模板不更新、路由 404 的最常见原因。
哪些文件缓存必须手动处理
文件缓存分散在 runtime/ 下多个位置,各自作用不同,不能一概而论:
-
模板缓存:路径为
runtime/view/,含编译后的 PHP 模板文件;tp6.1+ 可用php think clear:template,tp5 需手动删除该目录 -
路由缓存:单文件
runtime/route.php;tp6 运行php think route:clear,tp5 直接删该文件即可 -
配置缓存:
runtime/config.php(仅在app_debug = false时生效);修改配置后必须执行php think config:cache重建,否则 config() 仍读旧值 -
字段结构缓存:tp8 存于
runtime/schema/或runtime/temp/;需调用\think\facade\Db::clearCache(),不是Cache::clear()
命令行清理要加参数才真正有效
不加参数的 php think clear 是“半清”,生产环境容易踩坑。按需选择参数组合:
- 清模板 + 路由 + 配置 + 日志 + 缓存:用
php think clear --all(tp6/tp8 支持) - 只清模板缓存:tp6.1+ 执行
php think clear:template;tp5 无此命令,需rm -rf runtime/view/ - 只清路由缓存:tp6 用
php think route:clear;tp5 用rm runtime/route.php - 只清日志或缓存子目录:tp5.1.10+ 支持
--log/--cache/--route等独立开关
代码中清理要注意驱动和范围
在控制器或命令类里写清除逻辑,Cache::clear() 默认只清当前缓存驱动的数据(如 file 驱动下的 runtime/cache/),对 view/、route.php、schema/ 完全无效:
- 清 file 缓存子目录:tp6 推荐
think\facade\Cache::clear();tp5 用think\Cache::clear('file') - 安全删模板目录:tp6 用
think\helper\Dir::delete(Env::get('runtime_path') . 'view');tp5 用原生rrmdir()或Filesystem类,但别误删.gitignore - 禁止在 HTTP 请求中执行全量
Dir::delete(runtime_path())—— 并发写入可能引发文件锁或中断
权限问题常导致清理失败
Linux 下报 Permission denied 或删一半中断,本质是 PHP 进程用户(如 root)和 Web 服务用户(如 www-data)不一致:
- 统一用户执行:例如
sudo -u www-data php think clear --all - 改权限方案:设
chmod 775 runtime+chmod g+s runtime,确保新文件继承组权限 - 开发环境可软链:把
runtime/指向/tmp/think-runtime-xxx,但生产环境慎用
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











