0

我正在尝试获取用户的 IP 地址,以向他们展示与其地理位置相关的内容。我使用了 php 代码 $ip = getenv('REMOTE_ADDR'); 获取他们的 IP 地址。这在我的计算机上运行良好,但我的共同开发人员尝试了它,发现他根本无法连接到我们的网站并出现“主机不可访问”错误。他也无法通过 FTP 或他家中的另一台计算机连接到我们的站点。

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

谢谢

拉斯

4

3 回答 3

8
  1. 该代码没有副作用。您的同事看到的问题很可能是防火墙/连接/服务器配置问题。
  2. 使用 $_SERVER 确实是获取这些变量值的正确方法。
于 2009-09-05T22:36:24.487 回答
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;
}

至少这段代码可以让你得到实际的 IP 地址,即使是来自 ISP 代理后面的用户等等。

于 2009-09-06T06:28:17.730 回答
0

我责怪您的共同开发者 DNS 或 /etc/hosts 设置。

于 2009-09-05T22:46:24.863 回答