博主辛苦了,我要打赏银两给博主,犒劳犒劳站长。
【摘要】今天我写了一个函数,在ThinkPHP下做访问量的统计。
话不多说,直接上代码:
function get_count($model='pageview',$field='addtimestamp',$cachename='count'){
/* 将之前的所有访问记录做缓存,缓存1年的时间,一次即可 */
$m = M($model);
$cache = S($model);
if(!$cache){
$cache = $m->field($field)->order('id asc')->select();
S($model,$cache,86400*366);
}
// 最早一次访问当天0点0分0秒的时间戳
$earliest = strtotime($cache[0][$field]);
$earliest = strtotime(date('Y-m-d 00:00:00',$earliest));
// 今天0点0分0秒的时间戳
$today = strtotime(date('Y-m-d 00:00:00'));
$days = ceil(($today - $earliest)/86400);
/* 每天的访问统计缓存 */
$count = S($cachename);
if(!$count){
// 获取每一次访问的日期是第几天(最早一次访问的日期是第一天)
foreach($cache as $k => $v){
$v['time']=strtotime($v[$field]);
$day = ceil(($v['time']-$earliest)/86400);
$arr[]['num'] = $day;
}
// 获取从第一天至今天期间每天的访问总数
$count = array();
foreach($arr as $k => $v){
for($i = 1;$i < $days;$i++){
$date = date('Y-m-d',$earliest+($i-1)*86400);
if($v['num']==$i){
$count[$date]++;
}
if(!$count[$date]){
$count[$date]=0;
}
}
}
S($cachename,$count,84600*366);
}
// 把昨天的访问总数加入缓存中
if($count && $days == (count($count)+1) ){
$yesterday_count = $m->where($field.' like "'.date('Y-m-').(date('d')-1).'%" ')->count();
$count[date('Y-m-').(date('d')-1)]=(int)$yesterday_count;
S($cachename,$count,86400*366);
}
/* 今天实时的访问数,没有加入缓存中 */
$today_count = $m->where($field.' like "'.date('Y-m-d').'%" ')->count();
$count[date('Y-m-d')] = (int)$today_count;
return $count;
}
主要的思路是:如果第一次没有做过缓存,则第一次的时候将所有数据库中存储的访问记录做一个缓存,有效期设置为1年,当第二次打开就不需要再次访问数据库了,然后在从刚刚做的缓存中,统计出每日所访问的总数(不含今天的,因为今天的统计量是实时的),并保存到数组$count中,然后再次保存到缓存中,最好就是自动更新的操作了,做一个判断,如果第二天了,就需要把第一天的统计量加到缓存中。这就是思路,如果有什么不明白的地方,可以在下面评论中留下疑问。
版权归 马富天PHP博客 所有
本文标题:《如何在ThinkPHP下用缓存做每日访问量统计》
本文链接地址:http://www.mafutian.net/63.html
转载请务必注明出处,小生将不胜感激,谢谢! 喜欢本文或觉得本文对您有帮助,请分享给您的朋友 ^_^
顶5
踩1
评论审核未开启 |