php - 将 ip2long 数组转换为单个对象

标签 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) );

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

谢谢

最佳答案

你的函数看起来很好,产生了很多 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 .

关于php - 将 ip2long 数组转换为单个对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15454910/

相关文章:

php - moodle的视频插件

php - 为什么使用 AJAX 调用 php 方法时会得到 undefined index ?

php - 为每条记录仅获取mysql中的最新数据

php - 如何使用 PHP 表单从多个表中检索数据?

windows - 查找直连设备的IP地址

java - 为什么 Java InetAddress.isReachable() 不能像在 JRE 1.7.x 上那样在 JRE 1.8.x 上工作

php - PHP中使用二维码扫描并存储数据

javascript - PHP 数组用 JavaScript 确定?

mysql - Hive Metastore 服务器 (CDH) 启动失败

windows - 如何在 Windows 中模拟慢速网络连接