在php中获取客户端的ip地址

时间:2018-02-16 07:15:35

标签: php ip voting-system

我使用以下函数获取客户端的IP地址。

function get_client_ip() {
    $ipaddress = '';
    if (isset($_SERVER['HTTP_CLIENT_IP']))
        $ipaddress = $_SERVER['HTTP_CLIENT_IP'];
    else if(isset($_SERVER['HTTP_X_FORWARDED_FOR']))
        $ipaddress = $_SERVER['HTTP_X_FORWARDED_FOR'];
    else if(isset($_SERVER['HTTP_X_FORWARDED']))
        $ipaddress = $_SERVER['HTTP_X_FORWARDED'];
    else if(isset($_SERVER['HTTP_FORWARDED_FOR']))
        $ipaddress = $_SERVER['HTTP_FORWARDED_FOR'];
    else if(isset($_SERVER['HTTP_FORWARDED']))
        $ipaddress = $_SERVER['HTTP_FORWARDED'];
    else 

    if(isset($_SERVER['REMOTE_ADDR']))
        $ipaddress = $_SERVER['REMOTE_ADDR'];

    else
        $ipaddress = 'UNKNOWN';

    return $ipaddress;
}

但是我检查结果它给我的IP地址与我服务器上的机器IP地址不同。(我认为这是我的组织服务器的IP)任何解决方案我都可以获得客户端的真实IP地址。 编辑可能重复:我已阅读了可能重复的问题的答案。 我的问题是它没有给我机器的IP地址。

编辑-2直播链接 http://stashad.com/nodegates/voter.php?incr=blockvotes

2 个答案:

答案 0 :(得分:0)

试试这个代码段。

如果您的计算机是localhost或在网络上连接,则显示其原始IP

function getIP($ip = null, $deep_detect = TRUE){
    if (filter_var($ip, FILTER_VALIDATE_IP) === FALSE) {
        $ip = $_SERVER["REMOTE_ADDR"];
        if ($deep_detect) {
            if (filter_var(@$_SERVER['HTTP_X_FORWARDED_FOR'], FILTER_VALIDATE_IP))
                $ip = $_SERVER['HTTP_X_FORWARDED_FOR'];
            if (filter_var(@$_SERVER['HTTP_CLIENT_IP'], FILTER_VALIDATE_IP))
                $ip = $_SERVER['HTTP_CLIENT_IP'];
        }
    } else {
        $ip = $_SERVER["REMOTE_ADDR"];
    }
    return $ip;
}

使用

echo getIP();

如果deep_detect设置为TRUE,则检查客户端IP是否转发

echo getIP(null,true);

答案 1 :(得分:-1)

您的计算机未直接连接到服务器;它通过中间设备连接 - 比如路由器或大公司的网关。

服务器通常只能获取连接设备的IP地址。在某些情况下,负载均衡器之类的东西会在请求中添加包含原始IP地址的标头(例如HTTP_X_FORWARDED_FOR),但我认为这些标题通常不包括发出请求的计算机的私有IP地址。 / p>

如果查看下图,您就是其中一台计算机,但路由器与服务器建立了实际连接,而不是计算机本身。

Network diagram