根据IP自动跳转地区页面功能实现

最近项目中需要实现一个“根据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;
}
//取得IP
function 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/)



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值