淡定的502

导航

根据IP判断所在地区

进来因为ip跳转问题,很是头疼,国内的用的IP库多数是QQ纯真数据库,进来多发生不太准确的事情,所以找寻其他数据库,发现一家maxmind的国外网站提供这类数据库,就找来代码试试

<?php
include("geoipcity.inc");
include("geoipregionvars.php");
// 打开数据文件
$gi = geoip_open("GeoLiteCity.dat",GEOIP_STANDARD);
$ip='61.167.115.194';

$record = geoip_record_by_addr($gi, $ip);

//关闭数据库
geoip_close($gi);

//如果获取了相关数据
if($record)
{
echo 'loadGeoInfo('.
'"'. $_GET['q'] .'",'.
//原始查询信息
'"'. $ip .'",'. //被查IP
'"'. $record->country_code
.'",'. //国家代码(两位)
'"'. $record->country_code3
.'",'. //国家代码(三位)
'"'. $record->country_name
.'",'. //国家名称
'"'. $GEOIP_REGION_NAME
[$record->country_code] [$record->region] .'",'.
//地区名称
'"'. $record->city .'",'.
//城市名称
$record->latitude .','. //纬度
$record->longitude .')'; //经度

}
//如果数据库中不存在相关数据
else
{
echo 'alert("The Information for '.$ip.' is not available now!"); ';
}

?>

其中需要三个文件geoip.inc,geoipregionvars.php,geoipcity.inc 这三个文件都可以通过http://geolite.maxmind.com/download/geoip/api/php/这个地址下载到,还需要一个他们的数据库文件GeoLiteCity.dat 下载地址是http://geolite.maxmind.com/download/geoip/database/GeoLiteCity.dat.gz 

这样这段程序就能运行起来了,获得的city是中文的拼音

如果你想换成中文的话,有一个google的api可以做到http://maps.google.com/maps/api/geocode/xml?address=Harbin&sensor=false 其中的“Harbin”就是所提供给他的city的中文拼音名称,这样google会返回一个xml数据,其中就有这个城市的中文名称,还有其他相关信息,想要什么就从这个xml中取吧。

只可惜最后测试结果发现这个库也不是很准确。哎,还是没解决这个问题。

posted on 2012-02-21 14:58  淡定的502  阅读(2312)  评论(2编辑  收藏  举报