摘要:
利用getenv获取获取用户真实ip可以获取相当可观的用户数据,不管是做大数据还是数据备份查找来源,都是不错的选择.
好处:
一个网站,获取用户是非常有必要的,你获得了ip可以干嘛?简单了说,它只是显示一个地方,但如果这个ip数据足够大了.对一个网站来说好处可就大大的有了,做大数据,准确营销,假如你是购物网站,你肯定想让商品卖给需要它的人,而不是像超市一样哪里人多往哪开.也不会跑到寺庙卖梳子(把梳子卖给和尚属于骗人).
用法:
此方法不仅仅可以获取来访者IP,就算是国外的IP一样可以获取.甚至挂了vpn的客户端一样能获取到.
这里我们用超全局变量$_SERVER[‘REMOTE_ADDR’],它是你的客户端跟你的服务器”握手”时候的IP。如果使用了”匿名代理”,REMOTE_ADDR将显示代理服务器的IP。
当然,web服务器下,也有不用REMOTE_ADDR的,比如IIS服务器,用的是CLIENT_IP代表客户的IP,如果某人使用了代理,如何获取?HTTP_X_FORWARDED这个可以做到.当然,用这个东西会有一定的安全问题,我们下一篇文章再讨论.
web服务器很多都不允许获取它的服务器信息的,我们就可以用getenv去获取.
代码如下:
//不同环境下获取真实的IP
function get_ip(){
//判断服务器是否允许$_SERVER
if(isset($_SERVER)){
if(isset($_SERVER[HTTP_X_FORWARDED_FOR])){
$realip = $_SERVER[HTTP_X_FORWARDED_FOR];
}elseif(isset($_SERVER[HTTP_CLIENT_IP])) {
$realip = $_SERVER[HTTP_CLIENT_IP];
}else{
$realip = $_SERVER[REMOTE_ADDR];
}
}else{
//不允许就使用getenv获取
if(getenv("HTTP_X_FORWARDED_FOR")){
$realip = getenv( "HTTP_X_FORWARDED_FOR");
}elseif(getenv("HTTP_CLIENT_IP")) {
$realip = getenv("HTTP_CLIENT_IP");
}else{
$realip = getenv("REMOTE_ADDR");
}
}
return $realip;
}
为了防止重复运行代码或者重复的来访者IP,我们可以放在静态变量中.只需要在代码前面加如下面代码:
static $realip = NULL;
if($realip !== NULL){
return $realip;
}