【问题标题】:PHP: How To Create A List Of IP AddressesPHP:如何创建 IP 地址列表
【发布时间】:2015-08-11 19:55:29
【问题描述】:

我有一个 IP 地址范围列表,我想创建一个范围列表包含的所有 IP 地址的顺序列表。

列表类似于下面(但更长)...

From IP To IP   Total IPs   Assign Date Owner
1.0.32.0    1.0.63.255  8192    12/4/2011   
1.1.16.0    1.1.31.255  4096    12/4/2011   
1.1.32.0    1.1.63.255  8192    12/4/2011   
1.2.16.0    1.2.31.255  4096    12/4/2011   
1.2.32.0    1.2.63.255  8192    12/4/2011   
1.2.64.0    1.2.127.255 16384   12/4/2011   
1.3.0.0 1.3.255.255 65536   12/4/2011   

目前,我正在重复相同的 for () 循环。

<?php
for ($a = 0; $a <= 255; $a++) {
    echo "1.0.32.$a<br>";
}
for ($a = 0; $a <= 255; $a++) {
    echo "1.0.33.$a<br>";
}
for ($a = 0; $a <= 255; $a++) {
    echo "1.0.34.$a<br>";
}
for ($a = 0; $a <= 255; $a++) {
    echo "1.0.35.$a<br>";
}
for ($a = 0; $a <= 255; $a++) {
    echo "1.0.36.$a<br>";
}
for ($a = 0; $a <= 255; $a++) {
    echo "1.0.37.$a<br>";
}
?>

它会根据需要输出一个 IP 列表。

1.0.32.0
1.0.32.1
1.0.32.2
1.0.32.3
1.0.32.4
1.0.32.5
1.0.32.6
1.0.32.7
1.0.32.8

我会一直这样下去。嘿嘿嘿……

我确信有一些花哨的数学函数可以解决这个问题。不过我还没弄明白。

【问题讨论】:

  • 你可以在另一个 for 循环中创建一个 for 循环。

标签: php


【解决方案1】:

PHP Generate IP Ranges

函数 ip_range($start, $end) {
$start = ip2long($start);
$end = ip2long($end);
return array_map('long2ip', range($start, $end) );
}
$range_one = "1.1.1.1";
$range_two = "1.1.99.255";
print_r(ip_range($range_one, $range_two));

编辑:我在 1 秒内创建了 65794 个 IP 地址。

【讨论】:

  • 我不知道ip2long。我会调查一下,更多。
  • 我创建了这个代码的一个变体 (pastebin.com/EWahenDy),你可以看到结果 (flcbranson.org/chineseips.php)。但是,它没有显示所有结果。该页面在底部加载了很多空白空间,并且没有完成显示数组。你认为我是在撞 PHP 墙还是服务器墙?
  • 显然,这是一面 Internet Explorer 墙。 Firefox 显示它,就好了。
  • 不幸的是,Firefox 的淘汰时间并不比 IE 晚很多。我似乎无法在任何浏览器中显示我的全部结果。
  • 当我添加一行 IP 范围时,它始终如一地中断。前面的范围包含不到 500000 条记录。添加一个范围超过 500000。我想知道这是否是 PHP 数组限制。我的整个列表超过 300,000,000 个地址。
猜你喜欢
  • 2016-05-15
  • 2018-06-13
  • 2011-04-05
  • 2018-01-14
  • 2011-05-30
  • 1970-01-01
  • 2020-01-10
  • 2016-08-17
  • 1970-01-01
相关资源
最近更新 更多