ip地址精确定位地区,根据ip地址定位地理位置
当我们在页面上填写个人资料中的省市信息时,页面会根据当前用户所在的城市自动选择省市的下拉选项;当我们访问大型网站时,网站程序会自动进入用户当前所在的城市频道。这些功能是如何实现的?今天我们就通过实例来说明如何根据IP定位用户的城市信息。
根据当前用户的本地IP地址,查询IP地址数据库,获取IP所在省市的信息。目前,实现这一功能的方法有很多。
1.调用新浪IP地址库
新浪提供开放的ip地址数据库数据,供开发者调用。拨打地址:http://int.dpool.sina.com.cn/iplookup/iplookup.php,可以返回当前IP所在省市的信息。
我们结合本站helloweba文章:基于jQuery JSON的省市联动效果中的省市下拉插件来定位当前用户所在的省市,即默认选择当前用户所在的省市。
脚本类型= text/JavaScript src= js/jquery . js /script
script type= text/JavaScript src= js/jquery . city select . js /script
script type= text/JavaScript src= http://int . d pool . Sina . com . cn/iplookup/iplookup . PHP?
format=js /script
我们先加载jquery库和cityselect城市下拉插件,然后调用新浪的IP地址库,以js的形式返回。当然,如果要查询指定ip所在城市的信息,可以使用http://int.dpool.sina.com.cn/iplookup/iplookup.php?格式=JSON ip=123 . 123 . 123 . 123 . 123这样的接口地址,只需将参数IP值改为指定的IP地址即可。
本地js调用:
var my province=remote _ IP _ info[ province ];
var my city=remote _ IP _ info[ city ]
var my district=remote _ IP _ info[ district ];
$(function(){
$(#city_1 )。citySelect({
prov:myprovince,
城市:我的城市
});
});
H3调用新浪IP库接口/h3
p你所在的城市是:scriptdocument.write(我所在的省份我所在的城市);/script /p
div id=city_1
选择/选择
选择/选择
/div
2.调用淘宝IP地址库
淘宝还提供了权威的Ip地址库,调用地址:http://ip.taobao.com/service/getIpInfo.php? IP=123 . 123 . 123 . 123,返回IP对应的省市相关信息。
调用方法:
var mycity 2=JSON . data . city;
$(#city_2 )。html(你的城市是:我的省我的城市2 );
});
$ IP=get _ client _ IP();//获取当前用户的ip
$ URL= http://IP . Taobao . com/service/geti pinfo . PHP?ip=。$ ip
$ data=file _ get _ contents($ URL);//调用淘宝接口获取信息
echo $ data
Get_client_ip()用于获取本地用户的ip地址。
函数get_client_ip() {
if(getenv( HTTP _ CLIENT _ IP )strcas ecmp(getenv( HTTP _ CLIENT _ IP ), unknown ))
$ IP=getenv( HTTP _ CLIENT _ IP );
else if(getenv( HTTP _ X _ FORWARDED _ FOR )strcas ecmp(getenv( HTTP _ X _ FORWARDED _ FOR ),
未知))
$ IP=getenv( HTTP _ X _ FORWARDED _ FOR );
else if (getenv(远程_ADDR )strcascmp(getenv(远程_ ADDR ),未知))
$ IP=getenv( REMOTE _ ADDR );
else if (isset ($_SERVER[远程_ADDR]) $_SERVER[远程_ADDR]
strcasecmp($_SERVER[远程_ADDR],未知))
$ IP=$ _ SERVER[ REMOTE _ ADDR ];
其他
$ip=“未知”;
return($ IP);
3.调用无辜的IP库
无罪IP库基本每周更新。可以从各大下载网站下载最新版本的无罪IP库。天空推荐下载地址:http://www.skycn.com/soft/14344.html
用PHP调用无辜ip库的方法本文不详述,请戳这里:http://blog.csdn.net/aaron_luchen/article/details/6637799.
4.调用本地数据库
如果您的系统足够强大,为了安全和稳定,我们建议您使用本地ip地址库。目前,有IP地址库可供在线下载。我们使用mysql版本的IP库,然后通过PHP读取。
由于IP数据量大,一般有30万到40万条数据,所以需要优化表结构索引。
如果不存在,则创建表` iptocity `(
` IP_Start` double(53,0) NOT NULL默认为 0 ,
` IP_End` double(53,0)默认为空,
` IP _ province varchar(6)默认为NULL,
` IP _ city varchar(10)默认为NULL,
主键(` IP_Start `),
键“IP _ end”(“IP _ end ”)
)ENGINE=MyISAM默认字符集=utf8
前端ajax向getip.php发送异步请求,getIP.php读取mysql中的IP数据,返回对应IP地址的省市信息。
include _ once( connect . PHP );//链接数据库
$ myip=get _ client _ IP();//获取本地IP,上面已经给出了get_client_ip()函数
$ IP=IP 2 int($ myip);//转换ip
$sql=select IP_Province,IP_City from iptocity其中IP _ Start= $ IP order by IP _ Start desc
限制1 ;
$ query=MySQL _ query($ SQL);//查询库
$ RS=MySQL _ fetch _ array($ query);
$arr=array(
省=$ RS[ IP _省],
city=$rs[IP_City],
echo JSON _ encode($ arr);//返回json数据
//将ip地址转换为整数
函数ip2int($ip){
list($ip1,$ip2,$ip3,$ip4)=explode( . ,$ IP);
return $ip1*pow(256,3) $ip2*pow(256,2)$ ip3 * 256 $ ip4;
注意,我们使用自定义函数ip2int()将ip地址转换为整数,而不是使用PHP的内置函数ip2long()。因为ip2long()有时会将ip转换为负数,所以为了保险起见,我们使用了自定义函数ip2int()。
5.应用:根据用户所在城市跳转到不同页面。
通过上面的解释,我们知道了如何获取本地用户的城市信息。现在,我们必须根据用户居住的城市访问不同的页面。让我们以Handan.com为例,用go.php编写以下代码:
$ city=$ d[ city ];//使用上面的方法获取当地的城市名
开关(城市){
案例“深圳”:
$cityname=深圳;
打破;
案例“北京”:
$cityname=北京;
打破;
案例“上海”:
$ cityname= shanghai
打破;
默认值:
$ cityname= www
打破;
$go_url=http://。$cityname。 lashou . com ;
标题(位置:。$ go _ URL);
这样就可以根据用户所在的城市跳转到Handan.com对应的频道页面。请演示一下。
来自helloweba.com,原文链接:http://www.helloweba.com/view-blog-190.html
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。