看到别人网站上统计访客感觉很不错,自己想了想,也搞了一个简易版。
本来想着数据存在数据库的,不过一想频繁查询写入数据库如果人多对数据库负担大。,直接读写缓存好了。
统计当日访客数,代码如下
function tocache(){
if (extension_loaded('redis')) {
$redis = new Redis();
$redis->connect('127.0.0.1', 6379);
return $redis;
}
if (class_exists('Memcached')) {
$memcached = new Memcached();
$memcached->addServer('localhost', 11211);
return $memcached;
}
return false;
}
function tj() {
$mc = tocache();
if (empty($mc)) {
return ' ';
}
$time = time();
$ip = $_SERVER['REMOTE_ADDR'];
$arr = $mc->get('tj');
if (empty($arr)) {
$arr = [[$time, $ip]];
$mc->set('tj', json_encode($arr), 3600 * 24);
$tmp = [1, 1];
} else {
$arr = json_decode($arr, true);
$date = strtotime(date('Y-m-d'));
$arr = array_filter($arr, function($value) use ($date) {
return $value[0] >= $date;
});
$arr = array_values($arr);
$c = count($arr);
$tar = array_search($ip, array_column($arr, 1));
if ($tar !== false) {
$tmp = [$tar+1, $c];
} else {
$arr[] = [$time, $ip];
$mc->set('tj', json_encode($arr), 3600 * 24);
$tmp = [$c+1, $c+1];
}
}
return '您是今天第'.$tmp[0].'位访客,今日总访客:'.$tmp[1];
}
echo tj();