php 获取真实ip

在 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

发表回复 0