[Hitokoto Project]统计数据功能的思路 | 祭夜の咖啡馆
  • 充值系统已开放,修复了一些BUG

  • 各项服务恢复正常

  • 修复在线人数的显示

  • 修复了Baidu与Github登陆的小Bug

  • 优化网站整体代码布局,提高速度

[Hitokoto Project]统计数据功能的思路

记录 祭夜ゐ 3个月前 (08-06) 115次浏览 未收录 1个评论 扫描二维码

写在前面

这就是为了查看哪些网站在调用这个API,以及它们的调用频率是多少,
这样可以为后期限制请求量做铺垫。

何为铺垫?

就是在地上铺一层垫子~
意淫开始:
未来,在用户系统中加入会员制
(两种注册方式:
1.普通弱智验证码;
2.高级:化学、历史、矩阵验证码)
高级的上限可能是无限。。
会员可以添加自己的请求域名到系统里面。
意淫结束。

思路

请教了几个搜索引擎都没找到方法,就自己想了一个方案:
建一个数据表,请求一次就写入一行数据(包括域名,时间),
读取的时候用一个函数,可以获取到指定时间内域名的访问情况,
但是,这里有一个问题,数据库会不断增大到数据库爆炸。。
于是,再写一个函数用来删除今天之前的数据。

代码

1.记录部分

//record visit event
function visit_record($visitor, $visit_time)
{
    //删除过期数据
    delete_outdate_visit();

    $db = new DB;
    $array_visit = array(
        'visitor' => $visitor,
        'visit_time' => $visit_time
    );

    $result = $db->insert_array('visit', $array_visit);
    if ($result) {
        $db->close();
        return true;
    } else
        exit($db->error());
}

2.读取部分

//in $in_time seconds.
function visit_read($in_time)
{
    $time = $_SERVER['REQUEST_TIME'] - $in_time;
    $db = new DB;
    $query = $db->query("SELECT * FROM `visit` WHERE `visit_time` > $time ");
    $visitor = array();
    while ($fetch = $db->fetch($query)) {
        //统计
        if (isset($visitor[$fetch['visitor']])) {
            $visitor[$fetch['visitor']]['times']++;
        } else {
            $visitor[$fetch['visitor']] = array('times' => 1);
        }
    }

    //今天的全部请求数
    $all_hit = $db->count('SELECT count(*) FROM `visit` WHERE `visit`.`visit_time` > ' . ($_SERVER['REQUEST_TIME'] - 86400));

    $result = array(
        'visit_details' => $visitor,
        'all_hit' => $all_hit,
    );
    return $result;
}

3.删除部分

//删除今天零点之前的数据(Delete data older than 00:00:00 today)
function delete_outdate_visit()
{
    $db = new DB;
    $sql = 'DELETE FROM `visit` WHERE `visit`.`visit_time` < ' . strtotime(date('Y-m-d', time()));;
    $result = $db->query($sql);
    if (!$result)
        exit($db->error());
    $db->close();
    return TRUE;
}
注意
代码仅供参考,对于数组输出的问题请自行解决。
暂时因为虚拟主机限制,我没有更好的解决办法,
小量访问还是可行的,一旦达到一天之内上万的访问量,
我也不知道会发生什么,因为我的API压根就到不了这个访问量。

祭夜blog , 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:[Hitokoto Project]统计数据功能的思路
喜欢 (0)
[1690127128@qq.com]
分享 (0)
发表我的评论
取消评论
表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址
(1)个小伙伴在吐槽
  1. 文章不错非常喜欢
    头条新闻2019-08-09 00:19 回复 Windows 7 | Chrome 63.0.3239.132