侧边栏壁纸
博主头像
小斯小站 博主等级

用心分享技术

  • 累计撰写 37 篇文章
  • 累计创建 75 个标签
  • 累计收到 9 条评论

目 录CONTENT

文章目录

从宝塔获取网站访问统计

SCH小斯
2024-04-25 / 0 评论 / 0 点赞 / 21 阅读 / 6080 字
温馨提示:
本文最后更新于 2024-05-01,若内容或图片失效,请留言反馈。部分素材来自网络,若不小心影响到您的利益,请联系我们删除。

介绍

突然在宝塔中发现了一个非常不错的功能:

宝塔网站统计

没错,这个就是宝塔的网站监控,这个功能可用直接统计网站的访问量信息,相对准确很多,网上提供的接口可能会因为请求问题导致记录数量丢失,而宝塔的网站监控就可以从根源上进行记录请求,但是这个功能虽然很好,可是没有提供接口给我们使用,于是我决定研究并开发出一个获取其数据的接口。

寻找数据存放位置

经过一番查找,我发现宝塔统计数据就存放在这里:

统计数据存放路径

/www/server/total/logs/站点名称

观察数据结构

这个路径中,有一些.db文件,这些就是存储了统计信息的数据文件。

其中用日期命名的是每天的访问记录,而我们需要的是总统计数据,所以需要total.db这个文件

不难知道,这些是sqlite数据库的文件,我将total.db文件下载下来,并通过软件打开。

数据库结构

数据表

于是发现这个数据库的结构是这样的

  • client_stat 客户端统计 用于记录访问过的客户端信息

  • ip_stat IP统计 用于记录访问过的IP地址

  • referer2_stat 来源统计 用于记录访问来源信息

  • request_stat 请求统计 用于记录请求

  • spider_stat 蜘蛛统计 用于记录蜘蛛(爬虫)请求

  • uri_stat URI统计 用于记录访问的URI信息

请求统计记录

其中我们需要用到请求统计,也就是request_stat这个数据表,观察一下这个数据表

请求数据表内容

可以发现,数据表将每一天的各种请求信息记录了下来,那么我们只要通过一些简单的 代码 来读取并处理这些数据就可以实现这个接口了。

开始写代码

启用拓展

语言我选择了我最熟悉的后端语言 PHP 这个接口需要依赖sqlite3拓展,并且我发现我本地开发环境中没有启用这个拓展,于是我先修改这个配置

修改PHP配置

这样就将sqlite3拓展启用了,然后就可以开始写代码了。

这次是我第一次使用sqlite3这个功能,可能不是很了解,由于SQL语句基本都相似,所以学习起来非常快。

加载db

首先要用PHP加载这个.db文件

$db = new SQLite3("total.db");

这样就得到了一个类型为SQLite3的对象

注意:此时PHP文件和db文件存储在同一个路径下。

读取数据

然后要从这个数据库中的request_stat数据表中获取数据

$result = $db->query("select * from request_stat");

这样就获得了执行结果

错误分析

如果执行出现了错误,将会直接输出内容,并且query()方法会返回bool(false),我们可以对结果进行判断

if (!$result){
    printf("执行失败了,原因是:%s", $db->lastErrorMsg());
    die();
}

其中lastErrorMsg()方法在执行失败时会存储最后一次的错误信息,可以通过这个内容进行修改问题。

如果没有报错,那么目前的操作非常顺利,我们就可以对数据进行处理了。

处理数据

首先要创建一个数组用于存储信息

$data = [
    "pv"=>0,
    "uv"=>0,
    "ip"=>0,
    "req"=>0,
    "length"=>0
];

并将其所有键值都初始化为0,然后进行读取

while($row=$result->fetchArray(SQLITE3_ASSOC)){
    foreach (array_keys($data) as $k) {
        $data[$k]+=$row[$k];
    }
}

首先写上一个while循环,条件就是使用$result->fetchArray()方法一直读取结果中的数据并转换成一行数据$row,直到所有行读完,这个方法和mysqli_fetch_assoc()``非常相似,随后根据对应的键获取数据累加到$data`中的对应位置。

返回数据

最后,我们只要将$data这个数组中的数据反馈出来就可以了

echo json_encode($data);

实例

同时,我编写了一个小实例,效果如下:

效果图

现在,我开放这个小实例的下载

接口实例下载

清北网盘下载:https://pan.tsinbei.com/s/APCk

蓝奏云下载:https://schlibra.lanzouo.com/ie1ya0ljeerg

123云盘下载:https://www.123pan.com/s/xE9lVv-mISKd

提取码:4735

结尾

这篇教程到这里就结束了,感谢您的阅读,希望对您有帮助。: )

0

评论区