根据IP自动跳转地区页面功能实现
来源:互联网 发布:国家统计局旅游数据 编辑:程序博客网 时间:2024/04/19 22:43
最近项目中需要实现一个“根据IP自动跳转地区页面”的功能。查资料发现两种实现方式,一种是下载IP数据包,另一种是调用大公司的API。感觉还是调用API比较好,数据应该是最新的。大公司API有三个:
1、腾讯 http://fw.qq.com/ipaddress
返回值 var IPData = new Array("61.135.152.194","","北京市","");
2、新浪 : http://int.dpool.sina.com.cn/iplookup/iplookup.php?format=js 多地域测试方法:http://int.dpool.sina.com.cn/iplookup/iplookup.php?format=js&ip=218.192.3.42
返回值 var remote_ip_info = {"ret":1,"start":"218.192.0.0","end":"218.192.7.255","country":"\中\国","province":"\广\东","city":"\广\州","district":"
3、谷歌 : http://j.maxmind.com/app/geoip.js
此API提供的接口共有6个,geoip_country_code(){国家代 码},geoip_country_ name(){国家名称},geoip_city() {城市名称},geoip_region(){地区代码},geoip_latitude(){经度},geoip_longitude(){纬度}。
这次功能实现用的是新浪API,代码如下:
<?php header("Content-type: text/html; charset=utf8");/** * 获取客户端+服务端IP及地理位置信息 Sina iplookup * * @Support:QQ 910111100 (JoY) * @Time: 2012.10.11 15:50:00 * @HZapi.com (http://www.hzapi.com/) * *///取得地理位置信息function iplookup($ip=1){ if($ip){ //客户端 $userip=egetip_joy(); //客户端IP }else{ //服务端 $domain=$_SERVER['HTTP_HOST']; $userip=gethostbyname($domain); } //返回Sina地理位置信息 $json=@file_get_contents('http://int.dpool.sina.com.cn/iplookup/iplookup.php?format=js&ip='.$userip); $patterns = array(); $patterns[0] = '/var remote_ip_info = /'; $patterns[1] = '/;/'; $patterns[2] = '/\Wu/'; $find = array(); $find[0] = ""; $find[1] = ""; $find[2] = "%u"; $json = preg_replace($patterns, $find, $json); //过滤多余字符 $json_arr=json_decode($json,true); return $json_arr;}//取得IPfunction egetip_joy(){ if(getenv('HTTP_CLIENT_IP')&&strcasecmp(getenv('HTTP_CLIENT_IP'),'unknown')) { $ip=getenv('HTTP_CLIENT_IP'); } elseif(getenv('HTTP_X_FORWARDED_FOR')&&strcasecmp(getenv('HTTP_X_FORWARDED_FOR'),'unknown')) { $ip=getenv('HTTP_X_FORWARDED_FOR'); } elseif(getenv('REMOTE_ADDR')&&strcasecmp(getenv('REMOTE_ADDR'),'unknown')) { $ip=getenv('REMOTE_ADDR'); } elseif(isset($_SERVER['REMOTE_ADDR'])&&$_SERVER['REMOTE_ADDR']&&strcasecmp($_SERVER['REMOTE_ADDR'],'unknown')) { $ip=$_SERVER['REMOTE_ADDR']; } $ip=preg_replace("/^([d.]+).*/","1",$ip); return $ip;}/** * 模拟JS里的unescape * * @Support:QQ 910111100 (JoY) * @Time: 2012.09.29 15:50:00 * @HZapi.com (http://www.hzapi.com/) * echo unescape('%u4e1c%u6e56%u82b1%u56ed4%u53f7%u5c0f%u533a');*/function unescape($str) { $str = rawurldecode($str); preg_match_all("/(?:%u.{4})|.{4};|&#\d+;|.+/U",$str,$r); $ar = $r[0]; foreach($ar as $k=>$v) { if(substr($v,0,2) == "%u") { $ar[$k] = iconv("UCS-2","utf-8//IGNORE",pack("H4",substr($v,-4))); } elseif(substr($v,0,3) == "") { $ar[$k] = iconv("UCS-2","utf-8",pack("H4",substr($v,3,-1))); } elseif(substr($v,0,2) == "&#") { echo substr($v,2,-1).""; $ar[$k] = iconv("UCS-2","utf-8",pack("n",substr($v,2,-1))); } } return join("",$ar);} ?> <?php $iplookup=iplookup(); //iplookup(1)参数非空为获取服务器端IP$ClientCountry=unescape($iplookup['country']); //获得所在国家字符串if ($ClientCountry == "中国"){ Header("Location: http://url1"); //将此处的URL修改为对应国家的页面,以下各项类同}elseif ($ClientCountry == "台湾"){ Header("Location: http://url2"); }else{ Header("Location: http://url3"); } ?>
以上代码保存为独立PHP文件即可用于跳转。主要代码由JoY提供,感谢分享!
另,接口信息参考(http://blog.163.com/wzi_xiang/blog/static/6598296120118284720317/)
- 根据IP自动跳转地区页面功能实现
- 如何实现网站根据ip判断地区 自动跳转到所属地区页面【PHP版】
- 地区门户自动IP识别与跳转功能
- ip识别地区+页面动态跳转
- .Zoomla!逐浪CMS中的地区门户自动IP识别与跳转功能
- 根据IP获取地区
- 实现5秒钟后页面自动跳转功能
- jsp实现n秒后页面自动跳转功能
- ASP根据IP来判断跳转页面
- 根据IP判断所在地区
- 根据ip获取对应地区
- PHP根据IP判断地区
- javascript 实现自动跳转功能
- 页面自动跳转的实现
- 页面自动跳转实现方法
- 如何实现页面自动跳转
- 页面自动跳转实现方法
- jsp实现页面自动跳转
- Flex 下 mm.cfg 文件配置详解
- 构建新字符串
- C++十六周任务-字符串游戏4
- 指来指去一
- andEngine实例代码如何运行
- 根据IP自动跳转地区页面功能实现
- BI Publisher Error:自动化(Automation)错误
- 如何收缩表空间中的数据文件?
- vs为嵌入式制作静态链接库
- SimpleSearch安装说明
- android:paddingXXX (Content) android:layout_marginXXX (View本身整体)
- PHP 优秀的开源建站平台 .
- 指来指去(1)
- SimpleSearch php接口说明