php think clear 默认只清 runtime/cache/、log/、session/、trace/ 四个目录,不清理 view/、route.php、config/ 及 redis、标签缓存;多应用模式下需确认路径;-t 清模板,--all 清整个 runtime(保留关键文件),tp6+ 支持 clear:template 等细分命令。

ThinkPHP框架自带的缓存清理命令看似一键执行就能解决所有问题,但实际运行后模板不更新、路由404、Redis缓存还在、自定义标签缓存没清掉——这些现象几乎都源于没搞清php think clear到底清什么、不清什么、怎么加参数才真正生效。
先搞懂默认行为:php think clear 到底清哪些目录
执行php think clear时,它只删除 runtime/cache/、runtime/log/、runtime/session/、runtime/trace/ 这四个子目录下的内容;【不会碰 runtime/view/(模板缓存)、runtime/route.php(路由缓存)、runtime/config/(配置缓存)】。这就是为什么你删完缓存,刷新页面仍报 Template not found 或访问首页直接 404 的根本原因。
该命令也不清理任何 Redis、Memcache 等外部缓存,更不会处理带 tag 的缓存项——哪怕你在代码里写了 Cache::tag('user')->set(),它也完全无视。
确认当前项目是否多应用模式:若 config/app.php 中设置了 'app_multi' => true,则 cache 目录实际路径是 runtime/appname/cache/,而非 runtime/cache/;此时默认命令会清错位置。
按需精准清理:不同场景对应不同参数组合
方法一:只清模板缓存(避免白屏/模板不更新)
加 -t 参数即可:php think clear -t。它会清空 runtime/view/ 下所有编译后的 PHP 模板文件,且只作用于 ThinkPHP 原生模板引擎;如果你用了 Smarty 或 Twig,这个参数无效,得手动删对应目录。
方法二:强制清整个 runtime/(开发调试阶段最省心)
加 --all 参数:php think clear --all。这会递归删除 runtime/ 下所有子目录内容(包括 view/、route.php、config/、temp/),但【保留 runtime/ 根目录下的 .gitignore 和 runtime.php 等关键文件】。上线前慎用,可能引发首次访问延迟或配置加载失败。
方法三:TP6+ 清指定缓存类型(精细控制)
TP6.1 起支持按模块清理:php think clear:template(仅清模板)、php think clear:route(仅清路由)、php think clear:config(仅清配置缓存)。注意:这些命令在 TP5 中不存在,执行会报错 command not found。
清理 Redis 缓存:必须显式触发,不能依赖 clear 命令
第一步:确认缓存驱动已启用 Redis —— 查 config/cache.php 中 'default' => 'redis',且 'stores.redis.type' => 'redis' 配置正确。
第二步:执行 php think clear 时,TP6 会自动调用 Redis 驱动的 flush 方法(如 FLUSHDB),但前提是该驱动已在容器中注册;TP5 默认不触发任何 Redis 操作。
第三步:若需清指定前缀的 Redis 缓存(例如只清 think_cache:*),不能靠命令行,必须写代码:Cache::store('redis')->handler()->flushdb(); 或用 redis-cli 手动执行 redis-cli -a yourpass FLUSHDB。
注意:直接运行 FLUSHALL 会清空 Redis 实例中所有数据库的所有数据,【生产环境严禁执行】。
清除带标签的缓存:命令行不支持,必须代码调用
第一步:确认缓存驱动支持 tag —— file 和 redis 驱动支持,apc、xcache 不支持。
第二步:在控制器或命令行类中调用:Cache::tag('user')->clear(); 即可清空所有打上 user 标签的缓存项;多个标签可同时绑定:Cache::tag(['user', 'v2'])->set('profile', $data);,清除任意一个标签都会使该条缓存失效。
第三步:不要试图用 Cache::clear() 或 php think clear 清除 tag 缓存——它们对 tag 完全无感知,执行后返回 true 也不代表真实删除了数据。
安全的代码级清理:避免误删 runtime/ 根目录
① 获取 runtime 路径:$runtime = \think\facade\Env::get('runtime_path');
② 删除模板缓存目录:\think\helper\Dir::delete($runtime . 'view');
③ 删除路由缓存文件:unlink($runtime . 'route.php');(TP5)或执行 php think route:clear(TP6)
④ 清空自定义缓存目录(如你把 cache 放在 runtime/custom_cache/):\think\helper\Dir::delete($runtime . 'custom_cache'); —— 这一步必须确保路径拼接准确,【别漏掉末尾斜杠或写错大小写】,否则可能删成 runtime/custom_cacheabc 或 runtime/custom_cache/.. 导致灾难性后果。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











