【问题标题】:turn ip2long array into individual objects [closed]将 ip2long 数组转换为单个对象 [关闭]
【发布时间】:2013-03-17 10:41:43
【问题描述】:

我正在使用 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 地址"什么?
  • 您可以将它们存储为 va varcharlong 在您的数据库中。你遇到了什么问题?
  • 我不知道如何将数组导入数据库,
  • 你的表是什么样子的,你用的是 PDO 还是 MYSQLI?
  • 嗨,我正在使用 MYSQLI,我的表有三列 id、ip 和 netname

标签: php mysql ip


【解决方案1】:

你的函数看起来还不错,产生了很多 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为long,ip_end为long,netname;那么在查询IP地址时,您只需先到$ip = ip2long(...),然后再查找网络where ip_start <= $ip and $ip <= ip_end

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-09-04
    • 1970-01-01
    • 2020-10-05
    • 2020-11-20
    • 1970-01-01
    • 1970-01-01
    • 2019-02-12
    相关资源
    最近更新 更多