获取用户真实IP有点问题,求解

#1 zhgzzy

/**
  * 获取用户真实IP
  */
  function getIP(){
  if (isset($_SERVER["HTTP_X_FORWARDED_FOR"]))
  {
        if ($_SERVER["HTTP_CLIENT_IP"])
        {
             $proxy = $_SERVER["HTTP_CLIENT_IP"];
        }
        else
        {
             $proxy = $_SERVER["REMOTE_ADDR"];
        }
       $ip = $_SERVER["HTTP_X_FORWARDED_FOR"];
  }
  else
  {
       if (isset($_SERVER["HTTP_CLIENT_IP"]))
       {
             $ip = $_SERVER["HTTP_CLIENT_IP"];
        }
        else
        {
             $ip = $_SERVER["REMOTE_ADDR"];
        }
  }
  return str_replace(",","",$ip);
}

问题:
1. 在获取的IP后面有时会有一个逗号如: 192.168.1.1,  我已处理
2. 现在又发现一个问题 192.168.1.101 10 又获取到这样的地址

2014-05-28 17:30:36

#2 jake

你可以试试 echo die的方式来断点,看看是取得哪个值的时候出现的。

我猜是HTTP_X_FORWARDED_FOR,这个是前端CDN或者nginx之类的proxy发给后端的,会有发错的可能。

2014-05-28 17:49:02