php实现点击排行
实现点击排行的基本思路
在PHP中实现点击排行通常需要记录每个内容的点击次数,并根据点击次数进行排序展示。以下是常见的实现方法:
数据库方案
创建数据表时包含点击数字段:
CREATE TABLE articles (
id INT PRIMARY KEY AUTO_INCREMENT,
title VARCHAR(255),
content TEXT,
click_count INT DEFAULT 0
);
更新点击次数:

// 当用户访问文章时执行
$articleId = $_GET['id'];
$sql = "UPDATE articles SET click_count = click_count + 1 WHERE id = $articleId";
// 执行SQL语句
获取点击排行:
$sql = "SELECT * FROM articles ORDER BY click_count DESC LIMIT 10";
// 执行查询并显示结果
文件缓存方案
对于小型网站可以使用文件记录点击:

// 记录点击
$file = 'clicks.txt';
$clicks = file_exists($file) ? json_decode(file_get_contents($file), true) : [];
$id = $_GET['id'];
$clicks[$id] = isset($clicks[$id]) ? $clicks[$id] + 1 : 1;
file_put_contents($file, json_encode($clicks));
// 获取排行
arsort($clicks);
$top10 = array_slice($clicks, 0, 10, true);
Redis高效方案
使用Redis可以高效处理点击统计:
$redis = new Redis();
$redis->connect('127.0.0.1', 6379);
// 增加点击
$redis->zIncrBy('article_clicks', 1, $articleId);
// 获取排行
$topArticles = $redis->zRevRange('article_clicks', 0, 9, true);
防止刷点击
为防止恶意刷点击,可以加入IP限制:
$ip = $_SERVER['REMOTE_ADDR'];
$key = "article:$articleId:ip:$ip";
if (!$redis->exists($key)) {
$redis->incr("article:$articleId:clicks");
$redis->setex($key, 3600, 1); // 1小时内同一IP只计1次
}
定时任务处理
对于高流量网站,可采用异步处理:
// 记录点击日志
file_put_contents('click.log', "$articleId\n", FILE_APPEND);
// 定时任务脚本
$clicks = [];
$log = file('click.log');
foreach ($log as $line) {
$id = trim($line);
$clicks[$id] = isset($clicks[$id]) ? $clicks[$id] + 1 : 1;
}
// 更新到数据库或Redis
以上方案可根据网站规模和性能需求选择适合的实现方式。数据库方案简单直接,Redis方案性能更高,文件方案适合小型应用。






