php实现访客统计
实现访客统计的基本方法
使用PHP实现访客统计可以通过多种方式完成,以下是一个基于文件存储的简单实现方案:
创建一个PHP文件(如counter.php)用于处理统计逻辑:
<?php
$counterFile = 'counter.txt';
// 检查文件是否存在,不存在则创建并初始化计数为1
if (!file_exists($counterFile)) {
file_put_contents($counterFile, '1');
echo "访客数: 1";
exit;
}
// 读取当前计数并增加
$count = (int)file_get_contents($counterFile);
$count++;
file_put_contents($counterFile, $count);
// 显示当前访客数
echo "访客数: " . $count;
?>
改进的访客统计系统
为了更准确地统计独立访客,可以结合IP记录和cookie:
<?php
$visitorFile = 'visitors.dat';
$ip = $_SERVER['REMOTE_ADDR'];
$cookieName = 'visitor_token';
$expire = time() + 86400 * 30; // 30天有效期
// 检查cookie是否存在
if (!isset($_COOKIE[$cookieName])) {
setcookie($cookieName, uniqid(), $expire);
// 读取现有访问记录
$visitors = file_exists($visitorFile) ? unserialize(file_get_contents($visitorFile)) : [];
// 记录新访问
if (!in_array($ip, $visitors)) {
$visitors[] = $ip;
file_put_contents($visitorFile, serialize($visitors));
}
}
// 获取总访客数
$totalVisitors = file_exists($visitorFile) ? count(unserialize(file_get_contents($visitorFile))) : 0;
echo "独立访客数: " . $totalVisitors;
?>
使用数据库存储统计信息
对于更专业的解决方案,推荐使用MySQL数据库:
<?php
$db = new PDO('mysql:host=localhost;dbname=your_db', 'username', 'password');
// 创建表(只需执行一次)
/*
CREATE TABLE visitor_stats (
id INT AUTO_INCREMENT PRIMARY KEY,
ip VARCHAR(45) NOT NULL,
visit_date TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
user_agent TEXT,
UNIQUE KEY unique_visit (ip, visit_date)
);
*/
$ip = $_SERVER['REMOTE_ADDR'];
$userAgent = $_SERVER['HTTP_USER_AGENT'];
// 检查今天是否已记录过该IP
$stmt = $db->prepare("SELECT COUNT(*) FROM visitor_stats
WHERE ip = ? AND DATE(visit_date) = CURDATE()");
$stmt->execute([$ip]);
$alreadyCounted = $stmt->fetchColumn();
if (!$alreadyCounted) {
$stmt = $db->prepare("INSERT INTO visitor_stats (ip, user_agent) VALUES (?, ?)");
$stmt->execute([$ip, $userAgent]);
}
// 获取总访客数和今日访客数
$totalVisitors = $db->query("SELECT COUNT(DISTINCT ip) FROM visitor_stats")->fetchColumn();
$todayVisitors = $db->query("SELECT COUNT(DISTINCT ip) FROM visitor_stats
WHERE DATE(visit_date) = CURDATE()")->fetchColumn();
echo "总访客数: $totalVisitors<br>今日访客: $todayVisitors";
?>
高级统计功能实现
要实现更详细的统计,可以记录页面浏览、引用来源等信息:
<?php
// 扩展数据库表结构
/*
ALTER TABLE visitor_stats ADD COLUMN page_url VARCHAR(255);
ALTER TABLE visitor_stats ADD COLUMN referrer VARCHAR(255);
*/
$pageUrl = $_SERVER['REQUEST_URI'];
$referrer = $_SERVER['HTTP_REFERER'] ?? '直接访问';
$stmt = $db->prepare("INSERT INTO visitor_stats
(ip, user_agent, page_url, referrer)
VALUES (?, ?, ?, ?)");
$stmt->execute([$ip, $userAgent, $pageUrl, $referrer]);
// 获取热门页面
$popularPages = $db->query("SELECT page_url, COUNT(*) as hits
FROM visitor_stats
GROUP BY page_url
ORDER BY hits DESC
LIMIT 5")->fetchAll();
echo "<h3>热门页面</h3>";
foreach ($popularPages as $page) {
echo "{$page['page_url']} - {$page['hits']}次访问<br>";
}
?>
注意事项
文件存储方案适合小型网站,但要注意文件权限问题,确保PHP有写入权限。
数据库方案更可靠且功能更强大,但需要确保数据库连接安全,防止SQL注入。
对于高流量网站,应考虑使用缓存机制或专业分析工具如Google Analytics。
统计代码应放在网站的公共包含文件中,确保每个页面都能执行统计功能。







