`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() {