我使用的是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) );如有任何建议,我们将不胜感激。
谢谢
发布于 2013-03-17 10:41:44
你的函数看起来很好,生成了很多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 as long,ip_end as long,netname;当查询ip地址时,您需要做的就是首先$ip = ip2long(...),然后查找网络where ip_start <= $ip and $ip <= ip_end。
https://stackoverflow.com/questions/15454910
复制相似问题