判断请求统计数据位置需查三类源头:自定义中间件(如app/middleware/RequestStatMiddleware.php)、日志配置(config/log.php中channels.file.path路径)、或ThinkORM模型(如app/model/RequestStat.php);归档清理须先建表、搬数据、删旧、优化,禁用php think clear盲目清除。

ThinkPHP 本身不内置请求统计功能,所谓“请求统计大量数据”基本来自三类地方:自定义中间件写入的数据库表、Log 日志中人工提取的访问记录、或第三方监控 SDK(如 Sentry、Prometheus Exporter)产生的指标数据。直接删表或清日志可能丢掉归档依据,必须先确认数据源头。
怎么判断请求统计数据存在哪?
别猜路径,用代码查真实位置:
- 如果是你写的中间件往数据库存的,检查
app/middleware/下有没有类似RequestStatMiddleware.php,看它执行的Db::insert()或model->save()对应哪张表 - 如果走日志,运行
php think log:list查当前启用的日志通道;再看config/log.php里'default' => 'file'对应的'channels.file.path'值,通常是runtime/log/,但可能被改成runtime/stat_log/ - 如果用了 ThinkORM + 自定义模型,搜项目里有没有继承
think\Model且表名含stat、access、hit的类,比如app\model\RequestStat.php
数据库型请求统计如何安全归档清理
假设你有个 request_stats 表,每天新增上万条,不处理会拖慢查询甚至撑爆磁盘。不能直接 TRUNCATE TABLE request_stats,得先归档再删旧数据:
- 归档前建好目标表:
CREATE TABLE request_stats_202607 LIKE request_stats,确保字段、索引一致 - 用
INSERT INTO request_stats_202607 SELECT * FROM request_stats WHERE create_time < '2026-08-01'搬数据;注意加WHERE条件并测试小范围(比如先跑< '2026-08-10') - 删源表旧数据:
DELETE FROM request_stats WHERE create_time < '2026-08-01';务必加create_time索引,否则锁表时间长 - 归档后执行
OPTIMIZE TABLE request_stats收缩碎片(InnoDB 表有效)
别依赖 PHP 脚本做全量搬运——大表容易超时或内存溢出,优先用原生 SQL 在数据库终端操作。
立即学习“PHP免费学习笔记(深入)”;
日志型请求统计怎么提取+归档
如果你在 runtime/log/ 里用 error_log("STAT: $uri|$ip|$code", 3, $file) 这种方式记请求,归档本质是文本解析任务:
- 先用
grep "STAT:" runtime/log/*.log | head -20看实际日志格式,确认分隔符(是|还是\t)和字段顺序 - 归档脚本用
awk提取比 PHP 更稳:awk -F'|' '$1 ~ /STAT:/ {print $2","$3","$4}' runtime/log/202607*.log > /backup/stat_202607.csv - 归档完再清日志内容:
cat /dev/null > runtime/log/202607*.log(不是rm,避免进程写入失败) - 后续想查归档数据,直接用
csvsql --query "SELECT COUNT(*) FROM stdin WHERE status=200" /backup/stat_202607.csv(需安装csvkit)
为什么不能直接跑 php think clear 清请求统计
php think clear 清的是整个 runtime/ 目录下的 cache/、log/、temp/,它不管你是统计日志还是错误日志,也不区分新旧数据。误用后果很直接:
- 刚归档完的原始日志文件被删,归档数据失去校验依据
-
runtime/temp/里的模板编译缓存没了,首页首次加载变慢 200ms+ - 如果中间件把临时计数器存在
runtime/cache/下,清空会导致当天 UV 统计归零
真正要动手清理,永远基于时间戳(filemtime() 或数据库 create_time)筛选,而不是目录名或文件扩展名——后者在 ThinkPHP 多应用模式下极易失效。



















