Laravel 10 行程式碼實現簡單的網站 pv uv 統計

NiZerin發表於2019-04-21

最近在優化部落格呀,想做一個統計網站 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

相關文章