要彻底禁用ThinkPHP 3.2后台缓存,需配置层全面关闭模板、动作、静态、字段、数据等缓存开关,开启调试模式,手动清空Runtime目录,并添加浏览器与服务器端防缓存头。

ThinkPHP 3.2 后台管理系统要彻底禁用缓存,不能只关某一项——模板、行为、静态、字段、日志等缓存需协同关闭,否则仍可能出现“改了代码不生效”“日志清不掉”“菜单没刷新”等问题。关键在于配置层统一禁用 + 运行时强制清理 + 开发环境兜底保障。
一、配置文件中全面关闭各类缓存开关
在后台模块的配置文件(如 Application/Admin/Conf/config.php)中,明确设置以下选项为 false 或禁用值:
- 'TMPL_CACHE_ON' => false —— 关闭模板编译缓存,每次访问都重新解析模板
- 'ACTION_CACHE_ON' => false —— 禁用控制器动作缓存,避免跳过逻辑执行
- 'HTML_CACHE_ON' => false —— 关闭静态页面缓存,防止生成 .html 文件后不再更新
- 'DB_FIELD_CACHE' => false —— 关闭数据库字段缓存,避免模型字段信息旧化导致报错(尤其在修改数据库结构后)
- 'DATA_CACHE_TIME' => 0 —— 将数据缓存默认有效期设为 0(即不缓存),配合 'DATA_CACHE_TYPE' => 'File' 时更有效
二、确保调试模式开启(开发环境强推荐)
在入口文件(public/index.php)或后台模块入口处,确认已定义:
define('APP_DEBUG', true);
立即学习“PHP免费学习笔记(深入)”;
该设置会自动加载 ThinkPHP/Common/debug.php,其中已默认关闭所有缓存相关开关(包括模板、行为、日志缓存等),且开启错误追踪。这是最省心、最彻底的开发期禁用方式。
三、手动清除 Runtime 下全部缓存文件
仅关配置不删文件,旧缓存仍可能被读取。建议在后台添加一键清缓存接口,例如在 Admin 模块的公共控制器中写:
public function ajaxCleanCache() {
$dir = './Application/Runtime/';
if ($this->deldir($dir)) {
echo 1;
} else {
echo 2;
}
exit;
}
private function deldir($dir) {
if (!is_dir($dir)) return false;
$dh = opendir($dir);
while (($file = readdir($dh)) !== false) {
if ($file === '.' || $file === '..') continue;
$fullpath = $dir . '/' . $file;
if (is_dir($fullpath)) {
$this->deldir($fullpath);
} else {
unlink($fullpath);
}
}
closedir($dh);
return rmdir($dir) || !is_dir($dir);
}
调用该方法后,Runtime/Cache、Runtime/Logs、Runtime/Data 等子目录将被完整清空,杜绝残留干扰。
四、浏览器与服务器双重防缓存(前端辅助)
后台页面常因浏览器强缓存导致 JS/CSS/HTML 不更新,可在后台模板的 <head> 中加入:
<meta http-equiv="Cache-Control" content="no-cache, no-store, must-revalidate" />
<meta http-equiv="Pragma" content="no-cache" />
<meta http-equiv="Expires" content="0" />
也可在控制器中统一输出头信息:
header('Cache-Control: no-store, no-cache, must-revalidate, max-age=0');
header('Pragma: no-cache');
header('Expires: Mon, 26 Jul 1997 05:00:00 GMT');
这对 AJAX 接口返回的 JSON 数据同样适用,避免前端拿到过期响应。



















