前段时间在开发的过程中,遇到了一个很诡异的问题,明明在请求页面的时候Request了客户端的IP,但是在页面打印出来的时候却是不一样的IP,此IP从没见过,在纠结了N长时间后,终于发现是反向代理惹的祸,相信大家肯定有人遇到过这般问题,所以就写出来供大家参考

值得注意的是:必须在代理服务器上面设置将服务器信息带入主机头,否则不管怎么取都取不到你的客户端IP的

 

 

function getip(){

      $unknown ='unknown';

      if( isset($_SERVER['HTTP_X_FORWARDED_FOR'])&& $_SERVER['HTTP_X_FORWARDED_FOR']&& strcasecmp($_SERVER['HTTP_X_FORWARDED_FOR'], $unknown)){

      $ip = $_SERVER['HTTP_X_FORWARDED_FOR'];

        } elseif ( isset($_SERVER['REMOTE_ADDR'])&& $_SERVER['REMOTE_ADDR']&& strcasecmp($_SERVER['REMOTE_ADDR'], $unknown)){

      $ip = $_SERVER['REMOTE_ADDR'];

}

/*

处理多层代理的情况

或者使用正则方式:$ip = preg_match("/[\d\.]{7,15}/", $ip, $matches) ? $matches[0] : $unknown;

*/

if(false!== strpos($ip,','))

     $ip = reset(explode(',', $ip));

     return $ip;

}

 

posted on 2013-10-10 16:16  鸿雁飞舞  阅读(254)  评论(0编辑  收藏  举报