【问题标题】:How can I get the user's IP address in PHP? [duplicate]如何在 PHP 中获取用户的 IP 地址? [复制]
【发布时间】:2010-10-25 06:54:32
【问题描述】:

复制:

How do I find a user's IP address with php?

编辑:服务器是一个通过 suPHP 运行 PHP5 的 Debian linux 机器。以上帖子已阅读。此代码涵盖了所有提到的点,但仍返回未知地址。

我的代码总是要求知道远程 IP 地址。一旦我们可以得到一些访问的IP地址,我们是否选择代理地址并不重要。

下面的函数是我们目前使用的,但是在超过 20% 的套件中,服务器会陷入未知情况,并且 $_SERVER 变量中没有任何内容。

function getip()
{
    if ( $_SERVER["HTTP_CLIENT_IP"] && strcasecmp($_SERVER["HTTP_CLIENT_IP"], "unknown") )
    {
        $ip = $_SERVER["HTTP_CLIENT_IP"];
    }
    else if ( $_SERVER["HTTP_X_FORWARDED_FOR"] && strcasecmp($_SERVER["HTTP_X_FORWARDED_FOR"], "unknown") )
    {
        $ip = $_SERVER["HTTP_X_FORWARDED_FOR"];
    }
    else if (getenv("REMOTE_ADDR") && strcasecmp(getenv("REMOTE_ADDR"), "unknown"))
    {
        $ip = getenv("REMOTE_ADDR");
    }
    else if (isset($_SERVER['REMOTE_ADDR']) && $_SERVER['REMOTE_ADDR'] && strcasecmp($_SERVER['REMOTE_ADDR'], "unknown"))
    {
        $ip = $_SERVER['REMOTE_ADDR'];
    }
    else
    {
        $ip = "unknown: ".var_dump($_SERVER, true);
    }
    return($ip);
}

【问题讨论】:

  • 您使用的是什么服务器?您可能想阅读stackoverflow.com/questions/55768/…
  • 阅读。如果您查看上面的代码,它会检查该帖子中提到的所有字段。
  • 您使用的是什么服务器?了解版本会非常有用
  • 您不能信任 HEEP_X_FORWARDED_FOR 标头,因为它是由客户端设置的。
  • 忘记了这个。它不是重复的。正如我所说,代码实际上没有设置 remoteip。问题最终与自动脚本调用的脚本相关联。 PHP 未设置未通过网络服务器调用的 IP 变量。

标签: php


【解决方案1】:

Some random blog found via google 。有趣的代码其实是在评论里,而不是博主提到的。

function getIpAddress() 
{
    return (empty($_SERVER['HTTP_CLIENT_IP'])?(empty($_SERVER['HTTP_X_FORWARDED_FOR'])?
    $_SERVER['REMOTE_ADDR']:$_SERVER['HTTP_X_FORWARDED_FOR']):$_SERVER['HTTP_CLIENT_IP']);
}




function getRealIpAddr()
{
    if (!empty($_SERVER['HTTP_CLIENT_IP']))   //check ip from share internet
    {
      $ip=$_SERVER['HTTP_CLIENT_IP'];
    }
    elseif (!empty($_SERVER['HTTP_X_FORWARDED_FOR']))   //to check ip is pass from proxy
    {
      $ip=$_SERVER['HTTP_X_FORWARDED_FOR'];
    }
    else
    {
      $ip=$_SERVER['REMOTE_ADDR'];
    }
    return $ip;
}

【讨论】:

  • 与我所拥有的非常相似,只是我们检查了 $_SERVER['REMOTE_ADDR'] 并且它也是空白的。
猜你喜欢
  • 2016-10-05
  • 2017-10-15
  • 2023-04-08
  • 2013-05-01
  • 2017-07-06
  • 2021-10-22
相关资源
最近更新 更多