ThinkPHP 3.2 默认启用文件缓存且无自动清理机制,需手动关闭缓存(如设 TMPL_CACHE_ON=false、DATA_CACHE_TYPE='null')并定时清理 Runtime 目录内容(推荐 Linux cron 或安全 PHP 脚本),注意保留 .gitignore 及避免误删关键文件。

ThinkPHP 3.2 默认启用文件缓存,Runtime 目录(如 ./Application/Runtime/)会持续生成缓存、日志、模板编译、数据等文件。它本身不提供自动清理机制,需手动干预或自行实现定时+关闭策略。下面分两块说明:如何关闭缓存避免新增,以及如何安全、可控地定时清理 Runtime。
关闭 TP3.2 的各类缓存(从源头减少写入)
关闭缓存不是“清空”,而是让系统不再生成新缓存,这对开发调试或低频更新场景很实用:
-
关闭模板缓存:在
Conf/config.php中添加:'TMPL_CACHE_ON' => false,—— 这样Runtime/Cache/和Runtime/Temp/不再写入编译后的模板文件 -
关闭数据缓存:设缓存驱动为
Null,同样在 config.php 中:'DATA_CACHE_TYPE' => 'null',—— 此时Runtime/Data/停止写入 -
关闭日志写入(可选):
'LOG_RECORD' => false,可停用Runtime/Logs/;若只需控制级别,可用'LOG_LEVEL' => array()空数组屏蔽所有日志 - 注意:关闭不等于删除已有文件,旧缓存仍留在 Runtime 中,需单独清理
定时自动清理 Runtime 的可行方案
TP3.2 没有内置定时任务功能,需借助系统级工具(如 Linux cron)或 PHP 脚本主动触发。推荐以下两种轻量方式:
-
Linux 定时任务(生产环境首选):
编辑 crontab:crontab -e,添加一行(例如每天凌晨 2 点清空):0 2 * * * cd /path/to/your/project && rm -rf ./Application/Runtime/* 2>/dev/null
⚠️ 注意:确保执行用户对 Runtime 有写权限(建议与 Web 进程同组,如 www-data),并保留./Application/Runtime/.gitignore(如有) -
PHP 脚本 + 访问触发(适合无服务器权限场景):
新建clear_runtime.php放在 Web 可访问目录(如 Public/),内容为:<?php if (!defined('APP_PATH')) define('APP_PATH', dirname(__FILE__) . '/../Application/'); $runtime = APP_PATH . 'Runtime/'; if (is_dir($runtime)) { $iterator = new RecursiveIteratorIterator( new RecursiveDirectoryIterator($runtime, RecursiveDirectoryIterator::SKIP_DOTS), RecursiveIteratorIterator::CHILD_FIRST ); foreach ($iterator as $file) { $file->isDir() ? rmdir($file->getPathname()) : unlink($file->getPathname()); } } echo 'Runtime cleared.'; ?>然后通过浏览器或 curl 定期调用(如配合浏览器插件或简易计划任务)。切勿长期暴露此脚本在公网,建议加 IP 白名单或登录验证
补充:避免误删的关键细节
Runtime 下有些文件/目录不应被无差别清除:
立即学习“PHP免费学习笔记(深入)”;
-
Runtime/~runtime.php是框架自动生成的运行时配置快照,删后首次访问会重建,不影响功能 -
Runtime/Cache/和Runtime/Temp/可安全清,但若项目用了自定义缓存路径(如指向/tmp/tp3_cache),需额外处理 - 不要用
rm -rf Runtime(删整个目录),而应清其内容(Runtime/*),否则可能丢失.gitignore或部署时预置的空结构 - 多应用模式下(如 Admin/Home),Runtime 是共用的,清理即全局生效,无需分应用操作
不复杂但容易忽略:关缓存 + 定时删内容,比反复手动删更可靠。关键不在“全删”,而在“按需停写 + 定期归零”。



















