# Typecho 访客统计插件-VisitorLogger-Pro-Enhanced
这是一个为 Typecho 博客系统开发的访客统计插件，基于VistorLoggerPro进行修改增强。
除了原有功能外，额外增加了插件个性化功能，满足我自己的使用需求。

新增功能有：
 - **添加插件界面背景图，并可自定义** 默认图片来源是我的猫娘乐园图片API，可以自行更换
 - **数据面板透明化，可以自己调节颜色** 默认是白色半透明卡片，可以根据需要调节颜色

效果图：
<img src="https://teachermate.oss-cn-qingdao.aliyuncs.com/NNV5S-1762162891955-x_20251103_172446.png" />
<img src="https://teachermate.oss-cn-qingdao.aliyuncs.com/pzWZj-1762162900258-x_20251103_172519.png" />
 
修复的问题有：
 - 修复了原版插件静态文件缺失和相对路径错误的问题，补充了对应的本地静态文件。
 - 修复了当cdn分发JS等待时间过长却不切换本地文件的问题。设置了等待cdn分发静态文件超时时间为2秒，超时后自动获取本地文件。

除新增功能和静态文件获取逻辑修复外，与原版的VistorLoggerPro没有别的差别。

注意，使用插件时应该保持原版的文件夹名称，也就是**VistorLoggerPro**避免出现问题。

以下为原版VistorLoggerPro的README:

该插件提供了详细的访问统计功能，包括访问国家/地区统计、IP分布等信息，并进行了隐私保护处理。

## 功能特点

### 数据统计功能
- **四项核心指标**：PV(页面浏览量)、独立IP数、独立访客数(UV)、访问次数(会话数)
- **智能会话识别**：基于IP和时间间隔的会话计算（30分钟超时）
- **精准访客统计**：结合IP和User-Agent的独立访客识别
- 访问国家/地区统计（Top 30）
- IP分布统计（已匿名化处理）
- 省份访问统计图表
- 路由访问统计分析（页面访问量统计）
- 访问时间统计（按日期分布）
- 管理员访问自动排除

### 数据筛选功能
- 日期范围选择器
- 快捷时间选择（今天、昨日、最近7天、本周、上周、本月、上月、最近30天、全部）
- 按钮选中状态高亮显示
- 默认只加载近7天数据，优化首次加载速度

### 数据展示功能
- **四条曲线同时展示**：支持PV、独立IP、独立访客(UV)、访问次数四项指标同屏对比
- **趋势分析页面**：全新的访客趋势分析功能，支持多维度数据分析
- **动态时间轴**：选择单日时自动切换为小时段显示（0:00-23:00）
- **智能图例设计**：优化颜色方案和图例布局，提升可读性
- ECharts环形图表展示方式
- 列表视图支持（详细数据展示）
- 图表悬停效果（显示详细信息）
- 自适应图表区域

### 数据管理功能
- 删除特定IP记录功能（支持模糊匹配）
- 数据库自动优化
- 时区自动转换功能，确保访客时间记录准确

### 性能优化
- 异步API数据加载（getVisitStatistic.php和getTrendData.php）
- **解决大数据量加载问题，提高页面响应速度（从10s优化到2s）**
- **智能资源加载机制**：ECharts和Flatpickr的CDN优先加载，失败时自动回退到本地文件
- **智能SQL回退机制**：兼容MySQL 5.5+到8.0+所有版本，自动检测数据库版本
- 使用CDN加载ECharts图表库，减少插件体积
- 优化移动端显示

### 隐私保护
- IP地址匿名化处理（只显示前两段）
- 明确的隐私声明
- 符合相关法律法规要求
- 数据安全存储

### 界面特性
- **统计摘要卡片**：新增四项核心指标的数值展示区域
- **指标说明区域**：详细说明PV、独立IP数、独立访客数(UV)、访问次数的概念和统计方法
- **响应式设计**：指标说明区域支持桌面端4列网格和移动端单列布局
- **饼图尺寸优化**：适当放大饼图显示区域，提升数据可视性和视觉效果
- **渐变视觉效果**：为柱状图添加蓝色渐变背景和红色悬停效果
- 移动端自适应布局
- 美观的图表展示
- 增高环形图展示区域，改善视觉效果
- 列表/图表切换视图
- 优雅的加载动画

## 页面预览
<img width="2560" height="1270" alt="image" src="https://github.com/user-attachments/assets/ae35b642-5499-4440-ad4c-59ec9d3dbb58" />
<img width="2560" height="1270" alt="image" src="https://github.com/user-attachments/assets/5c9ca10a-7de6-4bb1-919d-edbc0392feae" />


![image](https://github.com/user-attachments/assets/f4c28629-39f9-4487-9cd4-4a0de2e48e0e)




## 安装方法

1. 下载插件文件
2. 在本地解压后把目录名改为VisitorLoggerPro
3. 将改后的文件上传到/usr/plugins目录下
4. 插件名为VisitorLoggerPro
5. 在 Typecho 后台启用插件
6. 要把该文件`visitor-stats.php`移动到handsome主题根目录（handsome主题适用）

## 使用说明

### 基本使用（Handsome主题适用）

1. 在 Typecho 后台创建新页面
2. 在页面模板中选择"访客统计"
3. 发布页面即可看到统计效果
4. 创建新页面，选择"访客统计"模板

## 问题说明

插件启用失败解决办法：
有一部分小伙伴之前使用过VisitorLogger插件，然后如果直接启用VisitorLoggerPro的话会报错
- 1.只需要把VisitorLogger相关文件全部删除即可，也就是两者不能共存。
- 2.数据库表不需要修改，但也可以把bot_list表删掉因为用不到。

## 隐私保护

本插件已实现以下隐私保护措施：
- IP地址匿名化处理（只显示前两段）
- 明确的隐私声明
- 符合相关法律法规要求

## 技术实现

- 前端：ECharts 图表库，支持四条曲线同时展示
- 后端：PHP + MySQL，支持SQL窗口函数优化
- 数据存储：Typecho 数据库，扩展user_agent字段
- 数据处理：通过API异步加载，支持PV、UV、IP、会话四项指标
- 会话算法：基于时间间隔的智能会话识别（30分钟超时）
- 兼容性：自动检测MySQL版本，智能回退到简化算法

## 作者信息

- 作者：BXCQ
- 博客：https://blog.ybyq.wang/
- GitHub：https://github.com/BXCQ

## 许可证

MIT License

## 更新日志

### v2.2.8 (2025-08-20) - 图表精细化优化版

#### 图表视觉优化
- **线条宽度优化**：将所有趋势线条宽度从4px减小到2px，符号大小从8px减小到6px
- **左轴刻度智能优化**：重构Y轴刻度算法，左轴最大值设为刚好比数据最大值大的整数+1，消除过多空白区域
- **动态间隔计算**：根据数据范围智能计算Y轴间隔（1、5、10、20、50、100），提升图表可读性
- **线条区分度提升**：优化后的图表能更清晰地区分IP数、访客数(UV)、访问数(SV)三条线的变化趋势
- **视觉平衡改进**：图表整体更加精致，避免了线条过粗带来的视觉负担

#### 技术改进
- **刻度算法重构**：从复杂的分段判断简化为基于数据驱动的动态计算
- **显示精度提升**：确保每条线的微小变化都能在图表上清晰体现
- **用户体验优化**：解决了数据值较小时线条重合难以区分的问题

### v2.2.7 (2025-08-19) - 用户体验优化版

#### 用户体验优化
- **趋势分析页面说明**：在趋势图表下方新增四项核心指标详细说明区域
- **指标概念解释**：详细说明PV、独立IP数、独立访客数(UV)、访问次数的概念和统计方法
- **技术实现展示**：展示各指标的SQL查询语句和数据获取方式，提升专业性
- **响应式设计**：指标说明区域支持桌面端4列网格和移动端单列布局
- **界面美化优化**：使用彩色图标和现代化卡片设计，增强视觉效果

#### 代码结构优化
- **精简文件结构**：移除冗余的header.php、footer.php、menu.php文件
- **代码内嵌优化**：将HTML头部和尾部代码直接集成到主要文件中
- **减少依赖关系**：简化文件引用结构，提升代码可维护性

### v2.2.6 (2025-08-19) - 图表视觉优化版

#### 图表视觉优化
- **饼图显示优化**：去除冗余标题，仅保留"路由访问统计"标题，界面更简洁
- **饼图尺寸优化**：适当放大饼图显示区域（半径增加约25%），提升数据可视性和视觉效果
- **路由统计增强**：路由显示数量从10个扩展到20个，提供更全面的访问分析
- **柱状图完整显示**：解决路由访问统计图加载不完整问题，增加底部空间并优化标签显示
- **渐变视觉效果**：为柱状图添加蓝色渐变背景和红色悬停效果，提升交互体验

#### 界面细节改进
- **标签显示优化**：调整饼图标签显示逻辑，适应放大后的图表尺寸
- **图例布局调整**：优化图例位置和间距，适配更大的饼图显示
- **移动端适配**：改进小屏设备上的图表布局和显示效果

### v2.2.5 (2025-08-19) - 兼容性优化版

#### 兼容性改进
- **智能SQL回退机制**：实现SQL窗口函数的智能回退，兼容MySQL 5.5+到8.0+所有版本
- **数据库自动升级**：自动检测并添加user_agent字段，无需手动操作数据库
- **错误处理优化**：完善API响应错误信息，便于问题排查和调试

#### 性能优化
- **查询性能提升**：优化单日和多日数据查询算法，支持按小时和按天双维度统计
- **内存使用优化**：重构数据库查询逻辑，减少内存占用
- **加载速度提升**：改进前端默认加载逻辑，提升用户体验

### v2.2.0 (2025-08-19) - 前端图表升级版

#### 图表功能升级
- **四条曲线同时展示**：支持PV、独立IP、独立访客(UV)、访问次数四项指标同屏对比
- **智能图例设计**：优化颜色方案和图例布局，提升可读性
- **交互体验优化**：改进悬停提示和图表动画效果
- **移动端适配**：优化小屏设备上的图表显示和统计摘要布局

#### 视觉设计改进
- **统计摘要卡片**：新增四项核心指标的数值展示区域
- **响应式布局**：完善移动端统计项目的排列和显示
- **配色方案优化**：采用专业的数据可视化配色，提升视觉效果

### v2.1.5 (2025-08-19) - API数据处理优化版

#### API架构升级
- **多指标数据计算**：重构getTrendData.php，支持四项指标的并行计算
- **智能会话算法**：实现基于IP和时间间隔（30分钟）的会话识别算法
- **数据聚合优化**：优化大数据量场景下的查询性能和响应速度
- **错误容错机制**：增强API稳定性，提供详细的错误信息反馈

#### 算法实现
- **UV计算逻辑**：基于IP+User-Agent组合的独立访客识别算法
- **会话识别机制**：30分钟超时的智能会话计算，支持跨日统计
- **时间维度处理**：单日按小时统计，多日按天统计的自适应算法

### v2.1.4 (2025-08-19) - 数据库结构升级版

#### 数据库架构升级
- **新增user_agent字段**：扩展visitor_log表结构，支持更精准的访客识别
- **自动结构升级**：插件启用时自动检测并升级数据库表结构
- **数据完整性保障**：确保现有数据完整性，新字段向后兼容

#### 统计指标体系重构
- **四项核心指标**：全新引入PV(页面浏览量)、独立访客数(UV)、访问次数(会话数)
- **精准统计算法**：结合IP地址和User-Agent的独立访客识别机制
- **数据记录增强**：开始记录**User-Agent**信息，提升统计准确性

### v2.1.3 (2025-08-19)

### 新增功能
- **趋势分析页面**：全新的访客趋势分析功能，支持PV、独立IP、独立访客(UV)、访问次数四项指标的多曲线图表
- **智能时间范围**：新增昨日、本周、上周、本月、上月快捷选择
- **动态时间轴**：选择单日时自动切换为小时段显示（0:00-23:00）
- **数据统计显示**：在图表中显示选定时间范围内的PV、独立IP数、独立访客数(UV)、访问次数四项核心指标
- **自适应全部时间**：全部时间范围自动从第一条访客记录开始计算

### 优化改进
- 优化API数据获取逻辑，提升趋势分析页面加载速度
- 改进图表交互体验，支持悬停显示详细数据
- 完善错误处理机制，提供更好的用户反馈

### v2.1.2 (2025-08-13) 

### 优化
- **智能资源加载机制**：实现ECharts和Flatpickr的CDN优先加载，失败时自动回退到本地文件
- **提升加载稳定性**：解决网络环境不稳定时图表库加载失败的问题
- **优化用户体验**：无需手动选择加载方式，系统自动选择最佳加载策略
- **增强容错能力**：多重加载保障，确保图表功能正常运行

### 技术改进
- 重构资源加载逻辑，采用Promise-based异步加载
- 添加详细的加载状态日志，便于问题排查
- 优化错误处理机制，提供友好的用户提示

## v2.1.1 (2025-06-21)

### 优化
- 移除本地chart.js文件（约200KB），减少插件体积
- 全部使用CDN加载ECharts图表库

### 修复
- 删除panel.php中对本地chart.js的引用

## v2.1.0 (2025-06-18)

### 前台优化
- 新增API端点(getVisitStatistic.php)处理数据聚合
- **解决大数据量加载问题，提高页面响应速度（从10s优化到2s）**
- 添加日期范围选择器和快捷按钮（今天、最近7天、最近30天、全部）
- 实现按钮选中状态高亮显示
- 优化首次加载速度，默认加载今天数据
- 增高环形图展示区域，改善视觉效果
- 修复图表悬停效果

### 后台优化
- 添加删除特定IP记录功能（支持模糊匹配）
- **重构图表加载逻辑，使用异步API获取数据**
- 添加省份访问统计图表
- 优化后台路由统计，解决X轴信息重叠问题
- 优化日期选择功能

### 修复
- 修复内容解码错误(ERR_CONTENT_DECODING_FAILED)
- 修复SQL错误(Unknown column 'province')

## v2.0.2 (2025-06-13)

### 功能增强
- **新增后台忽略IP名单功能**，支持批量添加和删除
- **前台删除管理员（自己）访问记录功能**，保持统计数据纯净
- 优化CDN环境下IP识别机制，解决IP不准确问题
- 添加IP地址过滤器，支持自定义过滤规则

### 修复
- **修复PHP 8.0环境下的弃用函数警告**
- 修复在某些主题下的样式冲突问题
- 修复日期选择器在移动端的显示问题
- 优化数据库查询，减少资源占用

## v2.0.1 (2025-05-15)

### 功能改进
- 修复时区问题：将数据库time字段从TIMESTAMP改为DATETIME类型
- **添加服务器时区自动转换功能**，确保访客时间记录准确
- 优化数据迁移处理，自动转换已有记录的时区
- **添加适配器（adapter.php），实现原版插件与当前插件的无缝衔接**

## v2.0.0 (2025-04-23)

### 主要功能
- 初始版本发布
- 实现基本访客统计功能
- 国家/地区访问统计
- IP分布统计（已匿名化处理）
- ECharts环形图表展示方式
- 列表视图支持
- 移动端适配

### 隐私保护
- IP地址匿名化处理（只显示前两段）
- 明确的隐私声明
- 符合相关法律法规要求

### 其他
- 优化移动端显示
- 管理员访问自动排除
