最近在優化部落格呀,想做一個統計網站 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 協議》,轉載必須註明作者和本文連結
By: Laravel-China 寧澤林
MyBlog: nizer.in