1

我有应该检测用户 IP 地址的 PHP 代码。下面的代码返回一个 IP 地址,但该 IP 地址有时是本地网络 IP(例如 10.0.0.1)而不是公共 IP。如何确保始终获得公共 IP?谢谢。顺便说一句,这段代码来自另一个 StackOverflow 帖子。此外,此代码用于通过 Internet 从完全独立的网络访问的网站,而不是我的 Apache Web 服务器。

if (isset($_SERVER["HTTP_CLIENT_IP"])){  
  $ip = $_SERVER["HTTP_CLIENT_IP"];  
} elseif (isset($_SERVER["HTTP_X_FORWARDED_FOR"])){  
  $ip = $_SERVER["HTTP_X_FORWARDED_FOR"];  
} elseif (isset($_SERVER["HTTP_X_FORWARDED"])){  
  $ip = $_SERVER["HTTP_X_FORWARDED"];  
} elseif (isset($_SERVER["HTTP_FORWARDED_FOR"])){  
  $ip = $_SERVER["HTTP_FORWARDED_FOR"];  
} elseif (isset($_SERVER["HTTP_FORWARDED"])){  
  $ip = $_SERVER["HTTP_FORWARDED"];  
} else {   
  $ip = $_SERVER["REMOTE_ADDR"];  
}
4

1 回答 1

2

消除所有if(){} else{}代码,只需请求REMOTE_ADDR

 $ip =  $_SERVER["REMOTE_ADDR"];

它是用户远程 IP 地址的唯一可靠来源,因为_SERVER客户端可以屏蔽所有其他密钥。

如果 IP 地址仍然是本地的(并且您确定您正在与不在网络中或在本地 VPN 上的客户端打交道),那么您可能正在与服务器缓存系统(例如 Squid 代理)打交道。看看http://www.nineteenlabs.com/2007/08/24/high-anonymous-proxy-squid-25/

于 2012-05-30T15:57:19.713 回答