background image

我们要准备一张数据表 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");