将IP存储为unsigned int?

时间:2010-09-30 06:50:18

标签: php sql optimization ip

我读到在数据库中存储IP地址的最佳方法是创建一个Unsigned Int(10)字段。如何使用PHP转换IP地址?我尝试过使用

$this->ip = long2ip($_SERVER['REMOTE_ADDR']);

但这似乎不起作用。我找到了使用

将其转换回IP地址的方法
$this->ip = sprintf("%u", ip2long($result['ip']));

如何最初转换IP地址?我应该使用PHP吗?或者集成到MySQL查询中会更好吗?

5 个答案:

答案 0 :(得分:12)

long2ip将整数转换为IP格式,ip2long执行逆转。

因此,使用ip2long$_SERVER['REMOTE_ADDR']转换为整数,以便将其存储在数据库中,并在从数据库中读取整数后使用long2ip

$long = ip2long($_SERVER['REMOTE_ADDR']);
$ip   = long2ip($long);

答案 1 :(得分:12)

最好将此逻辑放在SQL查询中:

INSERT INTO `table`
    (`ip`)
VALUES
    INET_ATON('192.168.0.1')

然后在选择数据时隐藏地址:

SELECT INET_NTOA(`ip`)
    FROM `table`

答案 2 :(得分:2)

我用过这个

function ip2int($ip) {
    $a = explode(".",$ip);
    return $a[0] * 256 * 256 * 256 + $a[1] * 256 * 256 + $a[2] * 256 + $a[3];
}

答案 3 :(得分:2)

如果您使用的是MySQL,可以使用INET_ATON(ip2long等效)和INET_NTOA(long2ip)函数,而不是使用PHP进行处理:

答案 4 :(得分:1)

您需要使用ip2long转换IP的虚线字符串版本,然后使用long2ip返回。看起来你现在倒退了。

$integer_ip = ip2long($_SERVER["REMOTE_ADDR"]); // => 1113982819
$dotted_ip  = long2ip($integer_ip);             // => "66.102.7.99"