在 PHP 中,获取客户端的真实 IP 地址通常涉及到考虑到多种情况,因为客户端的 IP 可能会被代理服务器或者负载均衡器等中间设备修改。以下是一种较为通用的方法来获取客户端的真实 IP:
function get_client_ip() {
$ipaddress = '';
if (getenv('HTTP_CLIENT_IP'))
$ipaddress = getenv('HTTP_CLIENT_IP');
else if(getenv('HTTP_X_FORWARDED_FOR'))
$ipaddress = getenv('HTTP_X_FORWARDED_FOR');
else if(getenv('HTTP_X_FORWARDED'))
$ipaddress = getenv('HTTP_X_FORWARDED');
else if(getenv('HTTP_FORWARDED_FOR'))
$ipaddress = getenv('HTTP_FORWARDED_FOR');
else if(getenv('HTTP_FORWARDED'))
$ipaddress = getenv('HTTP_FORWARDED');
else if(getenv('REMOTE_ADDR'))
$ipaddress = getenv('REMOTE_ADDR');
else
$ipaddress = 'UNKNOWN';
return $ipaddress;
}
但是需要注意的是,HTTP_X_FORWARDED_FOR
等头信息可以被伪造,所以这种方法并不一定能够获取到真正的客户端 IP。
如果是在一个相对可控的环境(例如,你知道你的网络架构中没有使用任何可能修改 IP 的代理或负载均衡器),那么直接使用 $_SERVER['REMOTE_ADDR']
就可以了。
$ip = $_SERVER['REMOTE_ADDR'];
但是在更复杂的情况下,还是推荐使用上面的函数来尝试获取最准确的客户端 IP 地址。
Was this helpful?
0 / 0