你在本网站的每个页面页脚处会看到当前页面被访问次数。这个实现方案其实很简单。我之前做过一个全站的访问次数显示。每次刷新页面访问次数都会+1。
昨天修改了一下,现在会分别统计每个页面的访问次数。
<?php
// 获取当前页面路径
// 使用 $_SERVER["REQUEST_URI"] 获取完整的请求 URI
// strtok() 用于移除查询参数(例如 ?id=123),以确保 /post/1 和 /post/1?ref=xyz 被视为同一个页面
$current_path = strtok($_SERVER["REQUEST_URI"], '?');
// 数据库配置 (请根据您的实际环境修改)
$servername = "localhost";
$username = "数据库用户名";
$password = "数据库密码";
$dbname = "数据库名";
// 创建连接
$conn = new mysqli($servername, $username, $password, $dbname, 3306);
// 检查连接
if ($conn->connect_error) {
// 记录错误,但不对用户显示敏感信息,也不中断页面加载
error_log("Database connection failed: " . $conn->connect_error);
// 可选:显示一个友好的提示,但我们尽量保持沉默
echo "<span style='color:red;'>[统计服务连接失败]</span>";
return; // 退出脚本,避免后续错误
}
$current_views = 0;
try {
// --- 步骤 1: 记录并更新访问量 ---
// 使用 INSERT ... ON DUPLICATE KEY UPDATE:
// 尝试插入新路径,如果 page_path 已存在 (DUPLICATE KEY),则执行 UPDATE 操作,将 visit_count + 1
$sql_update = "
INSERT INTO page_statistics (page_path, visit_count)
VALUES (?, 1)
ON DUPLICATE KEY UPDATE visit_count = visit_count + 1
";
$stmt_update = $conn->prepare($sql_update);
// 's' 表示绑定变量类型为 string
$stmt_update->bind_param("s", $current_path);
$stmt_update->execute();
$stmt_update->close();
// --- 步骤 2: 获取最新的访问量 ---
$sql_select = "SELECT visit_count FROM page_statistics WHERE page_path = ?";
$stmt_select = $conn->prepare($sql_select);
$stmt_select->bind_param("s", $current_path);
$stmt_select->execute();
$result = $stmt_select->get_result();
if ($row = $result->fetch_assoc()) {
$current_views = $row['visit_count'];
}
$stmt_select->close();
} catch (Exception $e) {
error_log("Page counter error: " . $e->getMessage());
$current_views = '错误';
}
// 关闭连接
$conn->close();
?>
<!-- HTML 输出部分 -->
<p class="textwp-copyright">
当前页面浏览次数: <?php echo htmlspecialchars($current_views); ?>
</p>
使用之前需要新建表,可是使用下面的语句
-- 建议使用新表名 page_statistics 以区分按路径统计
CREATE TABLE page_statistics (
id INT AUTO_INCREMENT PRIMARY KEY,
-- 存储完整的页面路径,例如:/post/my-article-title
page_path VARCHAR(500) NOT NULL UNIQUE,
visit_count BIGINT NOT NULL DEFAULT 0,
-- 为 page_path 添加索引以加快查询速度
INDEX (page_path)
);
使用的时候,你希望它在哪里显示,直接加上下面的代码就可以了
<?php include 'counter.php'; ?>

发表回复