Php $\u SERVER[';REMOTE\u ADDR&\x27;]提供服务器的IP地址,而不是用户的IP地址

Php $\u SERVER[';REMOTE\u ADDR&\x27;]提供服务器的IP地址,而不是用户的IP地址,php,ip-address,Php,Ip Address,编辑: 我已经清理了浏览器的缓存,现在我的PHP代码正在工作。 我知道已经有类似的问题,我不能信任$\u SERVER['REMOTE\u ADDR']来获取访问者的真实IP地址 我正在本地主机上测试我的网站,我不支持任何代理,我试图显示我的IP地址,但$\u服务器['REMOTE\u ADDR']给出了127.0.0.1,即服务器的IP地址 如果我将同一代码联机到我的服务器中,我将再次收到服务器的IP地址。 我尝试过以下方面,但没有成功: function get_visitor_ip()

编辑:

我已经清理了浏览器的缓存,现在我的PHP代码正在工作。


我知道已经有类似的问题,我不能信任
$\u SERVER['REMOTE\u ADDR']
来获取访问者的真实IP地址

我正在本地主机上测试我的网站,我不支持任何代理,我试图显示我的IP地址,但
$\u服务器['REMOTE\u ADDR']
给出了
127.0.0.1
,即服务器的IP地址

如果我将同一代码联机到我的服务器中,我将再次收到服务器的IP地址。

我尝试过以下方面,但没有成功:

function get_visitor_ip() {
    $ipaddress = '';
    if (isset($_SERVER['HTTP_CLIENT_IP'])) {
        $ipaddress .= $_SERVER['HTTP_CLIENT_IP'] . ' - ';
    }
    if(isset($_SERVER['HTTP_X_FORWARDED_FOR'])) {
        $ipaddress .= $_SERVER['HTTP_X_FORWARDED_FOR']. ' - ';
    }
    if(isset($_SERVER['HTTP_X_FORWARDED'])) {
        $ipaddress .= $_SERVER['HTTP_X_FORWARDED']. ' - ';
    }
    if(isset($_SERVER['HTTP_FORWARDED_FOR'])) {
        $ipaddress .= $_SERVER['HTTP_FORWARDED_FOR']. ' - ';
    }
    if(isset($_SERVER['HTTP_FORWARDED'])) {
        $ipaddress .= $_SERVER['HTTP_FORWARDED']. ' - ';
    }
    if(isset($_SERVER['REMOTE_ADDR'])) {
        $ipaddress .= $_SERVER['REMOTE_ADDR']. ' - ';
    }

    if($ipaddress == '') {
        $ipaddress = 'UNKNOWN';
    }

    return $ipaddress;
}
但是,它再次返回
127.0.0.1

有其他解决方案吗?

这意味着您的服务器可能在某种反向代理之后,例如负载平衡器或CDN。您的PHP服务器没有接收到来自客户端的直接连接,这些连接之前都经过一些中间层,因此您的服务器只能看到该中间层的IP


在这种情况下,中间代理通常会将某个指定HTTP头中的实际客户端IP转发到PHP服务器。也就是说,当您非常明确和有选择性地使用类似于
$\u SERVER['HTTP\u X\u FORWARDED']
的东西时当且仅当您知道您处于这种情况,并且您可以信任哪个HTTP头时。查阅主机/代理/网络情况的文档,它会告诉您使用哪个头。

您希望获得什么IP地址?在本地计算机上,连接到本地主机。@Daniel您不使用用于连接到internet的IP地址,因为连接永远不会离开您的PC。您从本地主机连接到本地主机,因此您将看到您的本地主机的IP。我假设您不会通过“internet”连接到本地主机。您在同一台计算机上,“直接”连接到本地主机,因此不涉及“internet IP地址”。@Ivar,kerbholz,好的!请忘记localhost上的示例,如果我将相同的php代码放到服务器上,我也会遇到同样的问题。我收到的是服务器的IP地址,而不是客户端的IP地址。您的服务器是否恰好在反向代理之后运行?在这个阶段,我建议
var\u dump($\u SERVER)
,并查看我写给Phil的内容
$\u SERVER['HTTP\u X\u FORWARDED']
最后给了我客户端Ip地址。