获取用户IP的最佳方式是什么?

时间:2016-06-23 14:11:09

标签: php ip

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

方法1:

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;
    }

Aproach2:

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 - 语句)。那么我可以简单地使用第二个吗?

换句话说, approach1 approach2 有优势吗?

1 个答案:

答案 0 :(得分:4)

使用第一个更安全,因为您进行了更多检查。大多数情况下,你可以在ipREMOTE_ADDR中找到HTTP_X_FORWARDED_FOR,如果它正在抛出代理,但有时你可以在其他变量中找到它,因为没有标准。

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

此外,您无需使用getenv()。您可以直接在$_SERVER

中查看

也请检查此答案:What is the difference between HTTP_CLIENT_IP and HTTP_X_FORWARDED_FOR?