Laravel 10 行代码实现简单的网站 pv uv 统计
最近在优化博客呀,想做一个统计网站 pv uv 的功能,虽然有第三的统计平台再用,但还是想自己写一个啊。
其实统计的数据非常简单,就是网站的访问量丶访客量。
public function __construct()
{
Funcs::setUV();
DB::table('visiter')->where('id',1)->increment('pv');
}
我还特意设计了两张简单的表来记录数据。
记录访客#
SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;
-- ----------------------------
-- Table structure for my_uvs
-- ----------------------------
DROP TABLE IF EXISTS `my_uvs`;
CREATE TABLE `my_uvs` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`ip` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
`last_time` int(10) NULL DEFAULT NULL,
PRIMARY KEY (`id`) USING BTREE
) ENGINE = MyISAM AUTO_INCREMENT = 34 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;
SET FOREIGN_KEY_CHECKS = 1;
记录 pv uv#
SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;
-- ----------------------------
-- Table structure for my_visiter
-- ----------------------------
DROP TABLE IF EXISTS `my_visiter`;
CREATE TABLE `my_visiter` (
`id` int(10) NOT NULL DEFAULT 0,
`pv` int(10) NULL DEFAULT NULL,
`uv` int(10) NULL DEFAULT NULL,
PRIMARY KEY (`id`) USING BTREE
) ENGINE = MyISAM CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Fixed;
SET FOREIGN_KEY_CHECKS = 1;
访问量#
初始化 visiter 表,新增一个就行 。
页面每访问一次,就自增 1.
DB::table('visiter')->where('id',1)->increment('pv');
访客量#
访客量我是以 ip 记录的,每个 ip 在 24 小时内访问只记录一次,所有才有了 last_time 字段,用访问时间做对比就行了。
public static function setUV()
{
$ip = request()->ip();
$uv = DB::table('uvs')->where('ip',$ip)->first('*');
$uv = self::toArray($uv);
if ($uv === null){
DB::table('uvs')->insert(['ip'=>$ip,'last_time'=>time()]);
DB::table('visiter')->where('id',1)->increment('uv');
return true;
}
if ($uv['last_time'] + 86400 < time()){
DB::table('uvs')->where('ip',$uv['ip'])->update(['last_time'=>time()]);
DB::table('visiter')->where('id',1)->increment('uv');
return true;
}
return 0;
}
总结#
可能这种方法统计的很不全面,但是在设计方面还算是比较合理的。
这种统计代码放在中间件里实现更精简更合理。
以 ip 来记录访客量,到后面数据肯定会比较大,这到时候用 artisan 计划任务清理就行。
代码贵在分享,本人较菜,勿喷~~~
本作品采用《CC 协议》,转载必须注明作者和本文链接
推荐文章: