最近做得一个小活动中,需要对访问者的IP来进行限制,已达到一些营销目的,本来我是想通过TP中的IpLocation类结合IP库来进行判断,但是在找IP库的时候,找了好久没有找到,却无意中发现了淘宝的查询ip归属地的一个接口,非常简单,用法如下:
$clientIP = getIPaddress();//获取客户端的IP地址
$taobaoIP = 'http://ip.taobao.com/service/getIpInfo.php?ip='.$clientIP;//把IP地址赋给淘宝的接口
$IPinfo = (array)json_decode(file_get_contents($taobaoIP));//接收返回信息
如果成功的话会返回如下格式:
Array
(
[code] => 0
[data] => stdClass Object
(
[country] => 中国
[country_id] => CN
[area] => 东北
[area_id] => 200000
[region] => 辽宁省
[region_id] => 210000
[city] => 沈阳市
[city_id] => 210100
[county] =>
[county_id] => -1
[isp] => 联通
[isp_id] => 100026
[ip] => 175.168.27.80
)
)
可以看到很多的信息,根据想限制的地区来对字段进行判断就可以达到限制IP的目的了~!
但是可能会发现上面 getIPaddress() 方法中不是TP中获取IP的方法,TP中自带获取IP的方式是get_client_ip(),本来我也想用这个方法,但是发现在移动端的时候获取的ip是非常不准确的,会飘忽不定,于是另一种方式来获取ip
function getIPaddress(){
$IPaddress='';
if (isset($_SERVER)){
if (isset($_SERVER["HTTP_X_FORWARDED_FOR"])){
$IPaddress = $_SERVER["HTTP_X_FORWARDED_FOR"];
} else if (isset($_SERVER["HTTP_CLIENT_IP"])) {
$IPaddress = $_SERVER["HTTP_CLIENT_IP"];
} else {
$IPaddress = $_SERVER["REMOTE_ADDR"];
}
} else {
if (getenv("HTTP_X_FORWARDED_FOR")){
$IPaddress = getenv("HTTP_X_FORWARDED_FOR");
} else if (getenv("HTTP_CLIENT_IP")) {
$IPaddress = getenv("HTTP_CLIENT_IP");
} else {
$IPaddress = getenv("REMOTE_ADDR");
}
}
return $IPaddress;
}
移动端通过此方法获取的ip是相对比较准确的,可以进行正确的判断。
通过以上的方法就可以实现对ip的限制,基本上没什么难度,非常简单。。。