1

我正在使用 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) );

任何建议,将不胜感激。

谢谢

4

1 回答 1

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 as long, ip_end as long, netname; 那么在查询 IP 地址时,您所要做的就是$ip = ip2long(...)先查找网络,然后再查找网络where ip_start <= $ip and $ip <= ip_end

于 2013-03-17T02:41:43.553 回答