PHP $ _SERVER ['REMOTE_ADDR']不再按预期给用户ipaddress了吗?

时间:2014-04-01 22:55:15

标签: php

在PHP 5.4之前运行使用$_SERVER['REMOTE_ADDR']检索用户IPAddress时,结果将是用户外部IPV6 IPAddress。 EG: 60.123.456.168

但是,自从将服务器更新为PHP 5.4后,返回的用户IPAddress似乎是他们的内部IP: EG: 192.168.1.34

如果您希望特定办公室或“路由器”查看特定内容组或我们的案例调试代码,这将成为一个问题。 我尝试使用其他IP选项$_SERVER['HTTP_X_FORWARDED_FOR'],但并非所有服务器都可以使用。

他们的另一种方法是在PHP> = 5.4中获取用户外部ipaddress还是已删除此功能?

3 个答案:

答案 0 :(得分:1)

这甚至会检查代​​理服务器并仍然显示正确的用户IP

<?php
function get_real_ip()
{

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

}
$IP_Address = get_real_ip();

echo $IP_Address
?>

答案 1 :(得分:1)

这不是PHP的错。除了阅读环境变量之外,PHP不会检测任何内容 您可能有一些代理,但配置不正确。

答案 2 :(得分:0)

确定,

想出这个问题似乎是由于我们的Newb服务器设置。 因为服务器实际上是从本地主机运行并通过Windows联网(我不知道它到现在为止)。 这解释了为什么本地IPAddress即将到来。

虚警:)

感谢大家的帮助!