thinkphp从3.2升级到5.1后,缓存清理方式发生实质性变化:命令行指令(php think clear)、路径结构(runtime/cache/、view/、temp/分离)、驱动机制(需显式调用store)、标签清理(依赖驱动支持)全部重构,旧脚本直接迁移会导致清不干净或误删关键文件。

ThinkPHP从3.2升级到5.1后,缓存清理方式发生了实质性变化:命令行指令、缓存路径结构、驱动加载机制、标签清理逻辑全部重构,旧版脚本和配置直接迁移会导致清不干净甚至误删关键文件。
命令行清理指令不再兼容
TP3.2用php index.php s=Index/clearCache或自定义入口脚本,而TP5.1必须用php think clear;该命令默认只清runtime/cache/和runtime/log/,【不清理runtime/view/下的模板缓存】,需加-t参数显式指定。
TP3.2的clearCache方法会递归删除整个Runtime/目录(含~caches/~logs/),TP5.1的php think clear则严格按驱动配置路径操作——若你改过config/cache.php里的path,它只清那个路径,不会碰默认位置。
缓存路径和目录结构彻底重排
TP3.2缓存文件散落在Runtime/Cache/AppName/ControllerName/和Runtime/Data/等多处;TP5.1统一收口到runtime/cache/(数据缓存)、runtime/view/(模板编译)、runtime/temp/(临时编译文件)三个独立目录。
手动删目录时,TP3.2可直接rm -rf Runtime/;TP5.1【严禁删除整个runtime/目录】,否则runtime/route/(路由缓存)、runtime/config/(配置缓存)一并消失,会导致首页404或Class not found报错。
Linux下推荐精准清理:rm -rf runtime/cache/* runtime/view/* runtime/temp/*,保留log/route/config/子目录。
代码层缓存清除必须重写
TP3.2用S('key',null)或cache(false)清空所有;TP5.1必须调用门面类:\think\facade\Cache::clear()——但注意,这仅清默认驱动,若项目中用了Cache::store('redis')或Cache::store('file')显式切换,得分别调用Cache::store('redis')->clear()和Cache::store('file')->clear()。
TP3.2的clear_cache()函数在TP5.1中已移除,公共函数delete_dir_file()需自行定义,且路径拼接必须用Env::get('runtime_path').'cache/'而非硬编码../Runtime/Cache/。
模板缓存清理逻辑完全独立
TP3.2模板缓存与数据缓存混在同一目录,clearCache()一并清除;TP5.1模板缓存走think\Template引擎,编译后文件存于runtime/view/,且【php think clear默认完全忽略该目录】。
必须执行php think clear -t才触发runtime/view/清理;若项目启用了多模板引擎(如Smarty),-t参数只清ThinkPHP原生模板,其他引擎缓存需手动删对应目录,例如runtime/smarty_cache/。
缓存标签清理需要驱动支持
TP3.2用clearTag('user')即可清标签;TP5.1的Cache::tag('user')->clear()依赖底层驱动实现——File驱动能清,但Apccache驱动根本无此功能,调了也静默失败。
确认是否生效:先检查config/cache.php中'type' => 'file'且'tag_prefix'已设置;再用var_dump(file_exists(runtime_path().'/cache/tag/user.php'))验证标签索引文件是否存在,不存在说明标签写入根本没触发。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











