background image

  `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"); 
//

 

统计总记录数,即在线用户数

list($totalOnline) = mysql_fetch_array(mysql_query("select count(*) from online"));  
echo $totalOnline;//

 

输出在线总数

mysql_close(); 

关于新浪

IP 地址库的调用,您也可以参阅 helloweba.com 文章根据 IP 定位用户所在城

市信息的介绍。

函数

get_client_ip()用来获取用户真实 IP。

代码如下
function get_client_ip() {