ThinkPHP 7.1 缓存未更新的核心原因是删错目录或缓存静默重建;需区分cache/view/temp/schema四类缓存位置,检查权限、驱动支持及标签命名规范,并可通过配置关闭缓存或使用think clear命令精准清理。

ThinkPHP 7.1 缓存文件删了但页面/数据仍没更新,核心问题往往不是“删得不够狠”,而是缓存没在你删的那个地方,或者新缓存被静默重建了。关键得找准缓存类型、定位真实存储位置、并切断自动回写路径。
确认你删的是哪一类缓存
ThinkPHP 7.1 的 runtime 目录下至少有 4 类独立缓存,各自路径和行为不同: - 数据缓存:默认在 `runtime/cache/`,对应 `Cache::get()` / `cache()` 调用 - 模板编译缓存:在 `runtime/view/`,是 `.php` 文件,改了 HTML 模板却没生效,八成卡在这儿 - 编译缓存(temp):在 `runtime/temp/`,含配置解析、路由规则、语言包等生成代码 - 数据库字段缓存:在 `runtime/schema/` 或 `runtime/temp/` 下的 `.php` 文件,新增字段不识别就查这个只删 runtime/cache/ 却发现模板还是旧的,或字段读不出来,就是删错了目录。
删完又被自动写回去?检查缓存是否“静默失败”
删了文件不代表缓存真清了——如果缓存驱动写入失败,TP 会继续读上次成功的旧副本,而你根本不知道它没写成功: - 检查 `runtime/cache/` 目录权限:Web 进程用户(如 `www-data`)必须有写权限,否则 `cache('key', $val)` 看似执行了,实际静默跳过 - 用 `dump(cache('your_key'));` 直接看当前读到的值,别靠“我以为该变了”判断 - 闭包方式写缓存时漏 `return`:`cache('key', function() { $data = db()->select(); /* 忘了 return $data; */ });` → 返回 `null`,缓存写入空值且不报错标签缓存(tag)没清干净?名字和写法必须严格匹配
`Cache::tag('user')->clear()` 清不掉,大概率是以下任一原因: - 标签名用了大写、冒号或空格:`'User'`、`'user:info'`、`' user '` 都无效,必须全小写+下划线,如 `'user_info'` - 写缓存时没走 `tag()->set()`:`cache('key', $data, 3600, ['tag'=>'user'])` 是无效的,必须用 `Cache::tag('user')->set('key', $data, 3600)` - 当前缓存驱动不支持标签:Apcu、Memcached 驱动压根忽略 `tag()`,只有 File 和 Redis 支持开发阶段最省心的解法:关掉缓存或强制检测
与其反复删文件,不如让框架不缓存: - 模板缓存:在 `config/template.php` 中设 `'cache' => false` 或 `'cache_time' => 0`(后者仍编译,但每次比对源文件修改时间) - 数据库字段缓存:在 `config/database.php` 中加 `'fields_cache' => false` - 全局关闭:确保 `APP_DEBUG = true`,多数缓存机制会自动降级或跳过用命令行清理也需对症下药:
-
php think clear:清temp、cache、log,但不包括view -
php think clear:template:TP7.1 支持,专清runtime/view/ -
php think clear --all:TP7.1 中已稳定支持,会覆盖全部 runtime 子目录
不复杂但容易忽略。
立即学习“PHP免费学习笔记(深入)”;



















