将ip2long数组转换为单个对象

时间:2013-03-16 21:27:50

标签: php mysql ip

我正在使用ip2long函数,该函数工作正常,并在数组中返回一长串IP地址。

我想要做的是将每个ip地址放入一个mysql数据库,我看了几个例子,但找不到任何与ip2long函数有关的例子,如果我说实话他们只是让人困惑我

以下是我的代码,

function ip_range($start, $end) {
$start = ip2long($start);
$end = ip2long($end);
return array_map('long2ip', range($start, $end) );
}

$range_one = "151.76.0.0";
$range_two = "151.76.255.255";
print_r( ip_range($range_one, $range_two) );

任何建议都将不胜感激。

由于

1 个答案:

答案 0 :(得分:2)

你的功能看起来很好,会产生大量的ip地址......

function ip_range($start, $end) {
    $start = ip2long($start);
    $end = ip2long($end);
    return array_map('long2ip', range($start, $end) );
}

$range = ip_range("151.76.0.0", "151.76.255.255");

但是我仍然不确定你想要存储ips的方式,每个都在不同的行中,或者它们应该在一行中?

假设每个ip在一个单独的行中,只需遍历数组:

foreach ($range as $ip) {
    // create db entry for $id
    // id column should be of type varchar(15)
}

如果整个ip范围只有一行:

$ip = implode(',', $range);
// create db entry for $id

您应该使用列类型文本,因为这些范围可能会变得很长。

在这两种情况下都浪费了很多数据空间,为什么不在数据库中存储长版本的ip范围呢?

四列id,ip_start为long,ip_end为long,netname;然后,在查询IP地址时,您需要先做$ip = ip2long(...),然后查找网络where ip_start <= $ip and $ip <= ip_end