ThinkPHP 3.2 数据缓存无全局关闭开关,需设 'DATA_CACHE_TYPE' => 'None' 或 '' 停用驱动,并删除所有 S() 和 cache() 调用,清空 Runtime/Temp 后验证无新缓存文件生成且 S() 返回 false。

ThinkPHP 3.2 的数据缓存默认是开启的(使用文件缓存),但**它不会自动全局生效**,而是按需调用 S() 或模型的 cache() 方法时才触发。所谓“关闭数据缓存”,实际是指让这些缓存调用失效或跳过写入/读取过程,并非一个开关式的一键禁用。核心思路是:停用缓存驱动、清空配置、避免调用缓存方法。
停用缓存驱动:设为空或无效类型
在项目配置文件(如 Application/Common/Conf/config.php)中,将缓存类型设为不支持的值,可使 S() 和模型缓存逻辑直接跳过:
-
推荐方式:设置
'DATA_CACHE_TYPE' => 'None'或'DATA_CACHE_TYPE' => ''。框架检测到该类型不可用,会自动忽略缓存操作,S('key', $val)不写入,S('key')返回false。 - 若保留
'DATA_CACHE_TYPE' => 'File',但把缓存路径设为不可写目录(如'DATA_CACHE_PATH' => '/dev/null/'),也能阻止写入,但可能抛出警告,不建议用于生产环境。
移除缓存调用:从代码层切断依赖
配置只是基础,真正起效要清理业务代码中的缓存逻辑:
- 搜索项目中所有
S(、$model->cache(、->cache(true)等调用,注释或删除。尤其注意控制器、模型和公共函数里隐式使用的缓存。 - 检查是否在模型基类或行为中统一启用了查询缓存(如
protected $options = ['cache'=>true]),如有则需显式关闭或重写。 - 若使用了
html静态缓存,它与数据缓存无关,但需确认'HTML_CACHE_ON' => false避免混淆。
验证是否真正关闭
仅改配置不等于生效,需实测确认:
立即学习“PHP免费学习笔记(深入)”;
- 清空
Runtime/Temp/目录,然后访问使用过S()的页面,观察该目录下是否**不再生成新缓存文件**(如xxx.php)。 - 在控制器中加测试代码:
dump(S('test_key', 'test_val', 3600)); dump(S('test_key'));,若两次都返回false,说明缓存已不可用。 - 开启调试模式(
APP_DEBUG=true),查看日志或 Trace 中是否有 “Cache not available” 或类似提示,辅助判断驱动加载状态。
补充说明:没有“全局强制关闭”开关
ThinkPHP 3.2 没有类似 'DATA_CACHE_OFF' => true 这样的硬性关闭配置项。它的设计是“按需启用”,所以关闭的本质是:让缓存驱动不可用 + 业务代码不调用。上线前务必检查所有缓存相关代码是否已清理干净,否则残留调用仍可能尝试写入并报错。



















