我们要准备一张数据表 online,用来记录访客 IP、地区及访问时间。整个示例统计过
程都依赖这张表,其结构如下:
CREATE TABLE IF NOT EXISTS `online` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`ip` varchar(30) NOT NULL,
`province` varchar(64) NOT NULL,
`addtime` int(10) NOT NULL DEFAULT '0',
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
PHP
online.php 用来记录访客信息,包括 IP 地址和地区。首先检测数据表中是否有访客
IP 记录,如果有,则只更新访问时间,否则,获取用户省份区域,并将用户 IP 即省份区
域插入到表中。在此,可以判断是否存在访客的 cookie 记录,如果不存在则向新浪 IP 地
址库请求获取访客的区域信息,并设置 cookie 值和过期时间。最后,我们删除表中已经
过期的记录,统计总记录数并输出,详细请看代码注释。
include_once('connect.php'); //连接数据库
$ip = get_client_ip(); //获取客户端 IP
$time = time();
//查询表中是否有 ip 为当前访客 IP 的记录
$query = mysql_query("select id from online where ip='$ip'");
if(!mysql_num_rows($query)){//如果不存在访客 IP
if($_COOKIE['geoData']){//如果存在 cookie,则获取用户的区域
$province = $_COOKIE['geoData']; //区域(省份)
}else{
$api = "http://int.dpool.sina.com.cn/iplookup/iplookup.php?
format=json&ip=$ip";
$json = file_get_contents($api);//调用新浪 IP 地址库
$arr = json_decode($json,true);//解析 json
$province = $arr['province'];//获取省份
setcookie('geoData',$province,$time+600); //设置 cookie,设置过
期时间为 10 分钟
}
//将访客信息插入到数据表中
mysql_query("insert into online (ip,province,addtime) values ('$ip','
$province','$time')");
}else{//如果存在,则更新该用户访问时间
mysql_query("update online set addtime='$time' where ip='$ip'");
}
//删除已过期的记录
$outtime = $time-600;
mysql_query("delete from online where addtime<$outtime");