这是在提交表单时获取IP的正确方法吗?

时间:2015-08-22 16:08:06

标签: php mysqli ip-address

我确实找到了一些关于保存IP的信息,我想出了以下代码:

// IP GRAB
$http_client_ip = $_SERVER['HTTP_CLIENT_IP']; //MORE RELIABLE IP
$http_x_forwarded_for = $_SERVER['HTTP_X_FORWARDED_FOR']; //ALSO MORE RELIABLE
$remote_addr = $_SERVER['REMOTE_ADDR']; //NOT RELIABLE BCS IT MAY BE A SHARED NETWORK OR BEHIND A PROXY

if (!empty($http_client_ip)) {
    $ip_address = $http_client_ip;
} else if (!empty($http_x_forwarded_for)) {
    $ip_address = $http_x_forwarded_for;
} else {
    $ip_address = $remote_addr;
}

$ip = ip2long($ip_address);

当用户按下提交按钮/已发送表单时,我想抓取用户的IP地址。我还想将此IP保存到数据库的表中。所以我在桌面上创建了一个IP列INT(11) UNSIGNED(这是推荐给其他人的。)

简而言之:我做得对吗?

2 个答案:

答案 0 :(得分:1)

您的代码可以扩展,以下函数可用于获取客户端IP:

function get_client_ip() {

    $ipaddress = '';
    if ($_SERVER['HTTP_CLIENT_IP'])
        $ipaddress = $_SERVER['HTTP_CLIENT_IP'];
    else if ($_SERVER['HTTP_X_FORWARDED_FOR'])
        $ipaddress = $_SERVER['HTTP_X_FORWARDED_FOR'];
    else if ($_SERVER['HTTP_X_FORWARDED'])
        $ipaddress = $_SERVER['HTTP_X_FORWARDED'];
    else if ($_SERVER['HTTP_FORWARDED_FOR'])
        $ipaddress = $_SERVER['HTTP_FORWARDED_FOR'];
    else if ($_SERVER['HTTP_FORWARDED'])
        $ipaddress = $_SERVER['HTTP_FORWARDED'];
    else if ($_SERVER['REMOTE_ADDR'])
        $ipaddress = $_SERVER['REMOTE_ADDR'];
    else
        $ipaddress = 'UNKNOWN';

    return $ipaddress;
}

只有在您有理由的情况下,才有必要将IP更改为长(ip2long)。

我将它保存为数据库中的String(VARCHAR)。

答案 1 :(得分:0)

这是我在进行了一些搜索之后提出的:

我将INT(11)UNSIGNED更改为VARCHAR(45),我只是在不使用ip2long();的情况下保存IP,其余部分与之前相同。现在,当我发布测试时,它会将::1添加到表格中的IP列。我认为它可以正常工作,我会在实际发布网站时查看它。

注意:我会接受这个答案。谢谢你的时间。