我正在使用 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) );
如有任何建议,我们将不胜感激。
谢谢
你的函数看起来很好,产生了很多 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 的方式,每个 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
, 网名;那么在查询 ip 地址时你所要做的就是 $ip = ip2long(...)
先再找网where ip_start <= $ip and $ip <= ip_end
.