1. 项目概述
作为一名长期运营个人博客的技术博主,我深知网站统计工具的重要性。市面上的主流统计方案要么加载缓慢影响用户体验,要么数据隐私无法保障。经过多次尝试和优化,我开发了这款名为"极简统计"的PHP网站统计系统,专门解决小型网站的轻量级统计需求。
这个系统最大的特点就是"简单高效":单文件部署、数据本地存储、响应速度控制在100ms以内。我在自己的三个博客站点上实测运行半年,日均处理3000+访问量稳定无压力。特别适合1核1G配置的服务器环境,完全不会给网站带来额外负担。
2. 核心功能解析
2.1 基础数据统计
系统核心统计维度包括:
- PV(页面浏览量):记录每个页面的访问次数
- UV(独立访客):基于Cookie识别唯一访客
- IP统计:记录访问者IP地址(经脱敏处理)
- 来源追踪:自动识别流量来源(直接访问/搜索引擎/外链)
- 地理信息:通过本地IP库解析访问者地域
- 设备信息:识别访问设备类型(PC/移动端)及浏览器
提示:所有IP地址在存储时都会进行脱敏处理,仅保留前两段(如192.168.x.x),既满足地域统计需求又保护访客隐私。
2.2 智能爬虫过滤
系统内置了常见搜索引擎和AI爬虫的User-Agent特征库,能自动识别并过滤:
- 主流搜索引擎(Google/Bing/Baidu等)
- 常见AI爬虫(ChatGPT、Claude等)
- 自动化工具(Selenium、Puppeteer等)
过滤机制采用多级校验:
- User-Agent特征匹配
- 访问频率分析
- 行为模式检测
实测过滤准确率达到98%以上,有效避免了虚假流量对统计数据的干扰。
3. 技术实现细节
3.1 系统架构设计
整个系统采用极简架构:
访问者浏览器 -> 统计JS脚本 -> 统计API(PHP) -> MySQL数据库 ↑ 管理后台(PHP)核心文件仅有两个:
- stats.php:数据收集与处理接口
- admin.php:数据展示与管理后台
3.2 关键代码解析
统计核心逻辑(部分代码示例):
// 获取基础访问信息 $ip = $_SERVER['REMOTE_ADDR']; $ua = $_SERVER['HTTP_USER_AGENT']; $url = $_SERVER['HTTP_REFERER'] ?? 'direct'; $page = parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH); // IP脱敏处理 $anon_ip = preg_replace('/(\d+)\.(\d+)\.\d+\.\d+/', '$1.$2.x.x', $ip); // 识别设备类型 $device = preg_match('/mobile|android|iphone/i', $ua) ? 'mobile' : 'desktop'; // 存储到数据库 $stmt = $pdo->prepare("INSERT INTO stats (date, page, ip, ua, referrer, device) VALUES (NOW(), ?, ?, ?, ?, ?)"); $stmt->execute([$page, $anon_ip, $ua, $url, $device]);3.3 性能优化方案
为确保统计系统不影响网站性能,我们采取了以下优化措施:
- 异步加载:统计JS采用async属性加载
- 数据压缩:传输数据经过gzip压缩
- 批量写入:高并发时自动启用批量插入
- 缓存机制:高频访问数据缓存在内存中
- 连接池:使用持久化数据库连接
实测在1核1G服务器上可轻松应对5000+日PV的访问量。
4. 安装部署指南
4.1 宝塔面板部署
- 在宝塔面板创建新网站
- 上传stats.php和admin.php文件
- 创建MySQL数据库并导入SQL结构
- 修改config.php中的数据库配置
- 在网站
<script async src="/stats.js"></script>4.2 手动部署
对于非宝塔环境,只需完成以下步骤:
- 确保服务器支持PHP7.0+和MySQL5.6+
- 上传文件到网站目录
- 配置数据库连接信息
- 设置crontab定时任务(每日数据汇总)
5. 使用与管理
5.1 多站点管理
在管理后台可以添加多个网站,统一查看统计数据。每个网站分配独立ID,通过在统计代码中添加site参数区分:
<script async src="/stats.js?site=2"></script>5.2 数据安全策略
系统采取多重安全措施:
- 数据库定期自动备份
- 管理后台强制HTTPS访问
- 登录采用bcrypt密码哈希
- 敏感操作需要二次验证
6. 常见问题解决
6.1 数据不准确可能原因
- 缓存问题:检查浏览器是否缓存了旧版JS
- 广告拦截:部分插件会屏蔽统计脚本
- 跨域限制:确保统计域名与主站一致
- 时区设置:检查服务器时区配置
6.2 性能优化建议
- 为stats表添加合适索引
- 启用OPcache加速PHP
- 定期归档历史数据
- 使用Redis缓存热点数据
7. 扩展开发建议
系统预留了多个扩展接口:
- 自定义事件追踪API
- 实时数据推送WebSocket
- 第三方平台数据导出
- 自动化报表邮件发送
开发者可以通过修改hook.php文件添加自定义功能。
我在实际使用中发现,这套系统最突出的优势就是轻量稳定。相比之前用过的第三方统计工具,本地部署的方案完全不用担心服务不可用或数据丢失的问题。特别是对于技术博客这类访问量不大但需要长期稳定运行的站点,自主可控的统计系统确实是最佳选择。