CREATE DATABASE IF NOT EXISTS FluxStat COLLATE 'gb2312_chinese_ci';
USE FluxStat;
-- 網站基本信息表
CREATE TABLE IF NOT EXISTS WebInfo (
Id INT AUTO_INCREMENT PRIMARY KEY,
WebName VARCHAR(50),
WebUrl VARCHAR(200),
StartTime DATETIME,
nTotalNum INT DEFAULT 0, -- 總訪問量
nDayMax INT DEFAULT 0 -- 單日峰值
);
INSERT INTO WebInfo (WebName, WebUrl, StartTime, nTotalNum, nDayMax)
VALUES ('流量統計系統首頁', 'https://localhost/test3/FluxStat/index.php', '2015-07-07 00:00:00', 0, 0);
-- 訪客明細表
CREATE TABLE IF NOT EXISTS Visitors (
Id INT AUTO_INCREMENT PRIMARY KEY,
vTime DATETIME, -- 訪問時間
vIP VARCHAR(50), -- IP 地址(支持 IPv6)
vOS VARCHAR(50), -- 作業系統
vExp VARCHAR(50), -- 瀏覽器
vRef VARCHAR(50) -- 來源頁面
);
-- 每日流量統計表(寬表設計,31 個日欄位 + 月總計)
CREATE TABLE IF NOT EXISTS FluxStat (
Id INT AUTO_INCREMENT PRIMARY KEY,
D1 INT, D2 INT, D3 INT, D4 INT, D5 INT, D6 INT, D7 INT,
D8 INT, D9 INT, D10 INT, D11 INT, D12 INT, D13 INT, D14 INT, D15 INT,
D16 INT, D17 INT, D18 INT, D19 INT, D20 INT, D21 INT, D22 INT, D23 INT,
D24 INT, D25 INT, D26 INT, D27 INT, D28 INT, D29 INT, D30 INT, D31 INT,
MTotalNum INT DEFAULT 0 -- 月總計
);
代碼組織為三個類文件,放置於 Class/ 目錄:
WebInfo.php:站點配置 CRUD、總計/峰值更新Visitors.php:訪客明細寫入、UA 解析、來源記錄FluxStat.php:日統計更新(按日期欄位自增)、月度彙總<?php
// FluxStat.php 片段
public function addVisit($webId, $day) {
// 1. 檢查當月記錄是否存在,不存在則初始化 31 個 0
// 2. 更新對應 D{day} 欄位 +1
// 3. 更新 MTotalNum +1
// 4. 聯動更新 WebInfo.nTotalNum +1,並檢查 nDayMax
$sql = "UPDATE FluxStat SET D{$day}=D{$day}+1, MTotalNum=MTotalNum+1 WHERE Id={$webId}";
// ... 執行並處理不存在情況 INSERT ...
}
配合 style.CSS 美化,提供:
gb2312_chinese_ci,導入 SQL 前執行 SET NAMES gbk;。index.php 需在每頁引入統計代碼(或通過 Nginx access_log 異步分析,性能更優)。Visitors 明細表(保留近 3-6 個月),避免表膨脹。