首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将ip2long数组转换为单个对象

将ip2long数组转换为单个对象
EN

Stack Overflow用户
提问于 2013-03-17 05:27:50
回答 1查看 262关注 0票数 1

我使用的是ip2long函数,它可以很好地工作,并返回数组中的IP地址的长列表。

我想要做的是把每个ip地址放到mysql数据库中,我看了几个例子,但找不到任何与ip2long函数相关的例子,老实说,他们只是把我搞糊涂了。

下面是我的代码,

代码语言:javascript
复制
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) );

如有任何建议,我们将不胜感激。

谢谢

EN

回答 1

Stack Overflow用户

发布于 2013-03-17 10:41:44

你的函数看起来很好,生成了很多ip地址...

代码语言:javascript
复制
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都在单独的行中,只需在数组中循环:

代码语言:javascript
复制
foreach ($range as $ip) {
    // create db entry for $id
    // id column should be of type varchar(15)
}

在整个ip范围只有一行的情况下:

代码语言:javascript
复制
$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

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15454910

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档