PHP获取客户端真实IP的方法

摘要:
利用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;
}
  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值