以下是一个完整的统计访问量的解决方案,使用PHP 5.4处理服务器端计数,JS实现前端展示。方案使用单一txt文件存储所有统计数据。
解决方案结构
- counter.php - PHP计数处理器
- counter.txt - 数据存储文件
- index.html - 前端展示页面
1. 计数器PHP脚本 (counter.php)
php复制<?php// counter.php$dataFile = 'counter.txt';// 初始数据结构$defaultData = [ 'total' => 0, 'month' => 0, 'week' => 0, 'today' => 0, 'last_update' => '0000-00-00'];// 读取数据或初始化if (file_exists($dataFile)) { $rawData = file_get_contents($dataFile); $data = unserialize($rawData); // 文件损坏时重置
if (!is_array($data)) $data = $defaultData;
} else { $data = $defaultData;
}// 获取当前时间信息$currentDate = date('Y-m-d');$lastDate = $data['last_update'];// 重置周期计数if ($currentDate != $lastDate) { // 重置今日计数
$data['today'] = 0;
// 如果是新周(周一)
if (date('w') == 1 || $lastDate == '0000-00-00') { $data['week'] = 0;
}
// 如果是新月
if (date('d') == 1 || $lastDate == '0000-00-00') { $data['month'] = 0;
}
$data['last_update'] = $currentDate;
}// 增加计数$data['today']++;$data['week']++;$data['month']++;$data['total']++;// 保存数据file_put_contents($dataFile, serialize($data));// 仅返回最新计数(不包含日期数据)header('Content-Type: application/json');echo json_encode([ 'today' => $data['today'], 'week' => $data['week'], 'month' => $data['month'], 'total' => $data['total']
]);?>
2. 数据存储文件 (counter.txt)
首次访问时自动创建,初始内容:
复制a:5:{s:5:"total";i:0;s:5:"month";i:0;s:4:"week";i:0;s:5:"today";i:0;s:11:"last_update";s:10:"0000-00-00";}
3. 前端展示页面 (index.html)
html运行复制<!DOCTYPE html><html><head>
<title>访问统计</title>
<style>
.counter-container { margin: 20px; padding: 15px; border: 1px solid #ddd; } .counter-item { margin: 10px 0; font-size: 18px; } </style></head><body>
<div class="counter-container">
<h2>网站访问统计</h2>
<div class="counter-item">今日访问: <span id="today">0</span></div>
<div class="counter-item">本周访问: <span id="week">0</span></div>
<div class="counter-item">本月访问: <span id="month">0</span></div>
<div class="counter-item">总访问量: <span id="total">0</span></div>
</div>
<script>
// 获取统计并更新页面
function updateCounter() { var xhr = new XMLHttpRequest();
xhr.open('GET', 'counter.php', true);
xhr.onreadystatechange = function() { if (xhr.readyState == 4 && xhr.status == 200) { var data = JSON.parse(xhr.responseText); document.getElementById('today').textContent = data.today; document.getElementById('week').textContent = data.week; document.getElementById('month').textContent = data.month; document.getElementById('total').textContent = data.total;
}
};
xhr.send();
} // 页面加载时更新
window.onload = updateCounter; </script></body></html>
功能说明
智能重置机制:
- 每日自动重置今日计数
- 每周一重置本周计数
- 每月1号重置本月计数
- 使用last_update字段跟踪最后更新时间
数据存储:
- 使用PHP的serialize()存储结构化数据
- 单文件存储简化维护
- 文件损坏时自动重置数据
前端交互:
- 页面加载时自动调用计数接口
- 使用AJAX获取最新数据
- 无刷新更新统计信息
部署说明
- 将三个文件放在同一目录
- 确保PHP 5.4+环境
- 给counter.txt写权限:
bash复制chmod 644 counter.txt
- 首次访问会自动创建数据文件
注意事项
- 访问量统计基于页面加载次数(刷新会增加计数)
- 使用JavaScript禁用时无法更新计数(但后端仍会计数)
- 如遇高并发访问,考虑添加文件锁:
php复制$fp = fopen($dataFile, 'c+');if (flock($fp, LOCK_EX)) { // 读写操作
flock($fp, LOCK_UN);
}fclose($fp);
这个方案实现了完整的访问统计功能,同时保证了PHP 5.4的兼容性,前端使用纯JavaScript无需任何库。
猜你喜欢
本站资源仅供研究学习,请勿商用。商用请自行联系软件作者获取授权。如产生法律纠纷,本站概不负责!