文件缓存目录必须显式指定path,且需为真实存在、web进程有写权限的绝对路径或runtime_path()衍生路径,否则缓存静默失效。

文件缓存目录必须显式指定 path,否则默认会写入失败或落到不可预期的位置(比如系统临时目录)。
config/cache.php 中的 path 必须是绝对路径或 runtime_path() 衍生路径
ThinkPHP 6 要求 path 指向一个真实存在、Web 进程有写权限的目录。常见错误是填相对路径如 'path' => '../runtime/cache/',但该路径在某些部署结构下会解析失败(比如入口 public/ 下运行时,上层目录不可达)。
- 正确做法:用框架内置函数生成绝对路径,例如
runtime_path('cache') - 不推荐硬编码,避免迁移时出错;也不要直接写
/var/www/runtime/cache,跨环境易失效 - 若手动指定,请确保目录已创建且权限为
755或775(取决于 Web 用户组)
ThinkPHP 5.1 的 DATA_CACHE_PATH 配置已弃用,别混用
TP5.1 开始统一收口到 config/cache.php 的 stores.file.path,旧版 config.php 里的 'DATA_CACHE_PATH'=>'./Runtime/Cache/' 不再生效。继续保留会导致缓存静默失效——Cache::get() 返回 null,但无任何报错提示。
- 检查项目中是否还存在
DATA_CACHE_PATH或DATA_CACHE_TYPE配置项,删掉 - 确认当前生效的是
config/cache.php,不是config/app.php或其他被覆盖的配置文件 - 运行
php think cache:clear清理旧缓存残留,避免路径混乱干扰判断
并发写入时 path 目录需支持原子写操作
文件缓存底层用 flock() 做锁,但如果 path 指向 NFS、某些容器卷或 FAT32 分区,flock() 可能失效,导致缓存文件损坏或读取到半写内容。
- 开发环境可用本地磁盘路径,如
runtime_path('cache') - 生产环境若必须用网络存储,请改用 Redis 驱动,别强行塞文件缓存
- 可通过
Cache::store('file')->set('test', 'ok', 10)+ 立即get()验证写入是否可靠
最常被忽略的一点:即使配置了 path,如果父目录 runtime/ 本身不存在或不可写,整个缓存系统会降级为“假成功”——set() 不报错,get() 却永远返回 null。务必先 ls -ld runtime cache 看权限和存在性。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











