【问题标题】:Best way to get user's IP? [closed]获取用户IP的最佳方法? [关闭]
【发布时间】:2016-10-25 22:27:00
【问题描述】:

我找到了两种方法来给我用户的 IP:

方法一:

function get_ip() {
    $ipaddress = '';
    if (getenv('HTTP_CLIENT_IP'))
        $ip = getenv('HTTP_CLIENT_IP');
    else if(getenv('HTTP_X_FORWARDED_FOR'))
        $ip = getenv('HTTP_X_FORWARDED_FOR');
    else if(getenv('HTTP_X_FORWARDED'))
        $ip = getenv('HTTP_X_FORWARDED');
    else if(getenv('HTTP_FORWARDED_FOR'))
        $ip = getenv('HTTP_FORWARDED_FOR');
    else if(getenv('HTTP_FORWARDED'))
        $ip = getenv('HTTP_FORWARDED');
    else if(getenv('REMOTE_ADDR'))
        $ip = getenv('REMOTE_ADDR');
    else
        $ip = 'UNKNOWN';
    return $ip;
    }

方法2:

function get_ip() {
    if ($_SERVER['HTTP_X_FORWARDED_FOR']) {
        ip = $_SERVER['HTTP_X_FORWARDED_FOR'];
    } else {
        $ip = $_SERVER['REMOTE_ADDR'];
    }
    return $ip;
}

你能告诉我哪个更好吗?实际上我需要在每个页面加载时执行该功能get_ip()。同样如您所见,第一种方法有很多条件(if-statements)。那么我可以简单地使用第二个吗?

换句话说,approach1approach2 有优势吗?

【问题讨论】:

标签: php ip


【解决方案1】:

使用第一个更安全,因为您会进行更多检查。大多数时候你可以在REMOTE_ADDRHTTP_X_FORWARDED_FOR 中找到ip,如果它要抛出代理,但有时你可以在其他变量中找到,因为没有标准。

我个人通常采用第二种方法,因为它更干净,但如果你想确保你有 ip,请使用第一种。

您也不需要使用getenv()。可以直接在$_SERVER查看

也检查这个答案:What is the difference between HTTP_CLIENT_IP and HTTP_X_FORWARDED_FOR?

【讨论】:

  • 你是对的..但实际上我有一种不好的感觉,即在每个页面加载的过程中都有很多条件。所以我真的不知道该选哪一个。
  • 你不必担心额外的5个if声明。
  • 我完全不用担心这些条件的性能。记录 IP 需要更多的资源。
  • 我真的不应该关心 5 个if 声明吗?我认为这是一场噩梦.. 5 个条件需要很多过程,我认为这会使性能变弱。无论如何谢谢你.. 赞成
猜你喜欢
  • 1970-01-01
  • 2010-11-07
  • 2021-03-07
  • 1970-01-01
  • 2013-04-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多