PHP getenv('REMOTE_ADDR')严重的副作用?

0 php ip ip-address

我正在尝试获取用户的IP地址,以向他们显示与其地理位置相关的内容.我使用php代码$ ip = getenv('REMOTE_ADDR'); 抓住他们的IP地址.这在我的计算机上工作正常,但我的共同开发人员尝试了它,发现他根本无法连接到我们的网站并且出现"Host Not Accessible"错误.他无法通过FTP连接到我们的网站,也无法通过他家中的另一台计算机连接到我们的网站.

我拿出了这段代码,他仍然无法连接(但可以使用代理).我想知道为什么这段代码会产生这些副作用.是$ _SERVER('REMOTE_ADDR').什么是在PHP中获取用户IP地址的最佳方法?

谢谢

拉斯

Vin*_*vic 7

  1. 该代码没有副作用.您的同事看到的问题更可能是防火墙/连接/服务器配置问题.
  2. 使用$ _SERVER确实是获取这些变量值的正确方法.


mau*_*ris 7

http://thephpcode.blogspot.com/2009/01/php-getting-secondary-internet-protocol.html

function getIP() {
  $IP = '';
  if (getenv('HTTP_CLIENT_IP')) {
    $IP =getenv('HTTP_CLIENT_IP');
  } elseif (getenv('HTTP_X_FORWARDED_FOR')) {
    $IP =getenv('HTTP_X_FORWARDED_FOR');
  } elseif (getenv('HTTP_X_FORWARDED')) {
    $IP =getenv('HTTP_X_FORWARDED');
  } elseif (getenv('HTTP_FORWARDED_FOR')) {
    $IP =getenv('HTTP_FORWARDED_FOR');
  } elseif (getenv('HTTP_FORWARDED')) {
    $IP = getenv('HTTP_FORWARDED');
  } else {
    $IP = $_SERVER['REMOTE_ADDR'];
  }
return $IP;
}
Run Code Online (Sandbox Code Playgroud)

至少这个代码甚至可以从ISP代理服务器后面的用户那里获得实际的IP地址等等.