7

如您所知, range() 函数可以获取数字和另一个之间的范围,

如何以 IP
为例..

$range_one = "1.1.1.1";
$range_two = "1.1.3.5";
print_r( range($range_one, $range_two) ); 

 /* I want a result of :
     1.1.1.1
     1.1.2.2
     1.1.3.3
     1.1.3.4
     1.1.3.5
 */

我正在考虑使用explode()函数来爆炸“。”并分隔每个数字,然后将它们中的每个数字使用范围,然后将它们组合在一起,这对我来说似乎有点复杂,我想有一个更简单的方法来做到这一点

4

3 回答 3

14

您可以使用ip2long将 IP 地址转换为整数。这是一个适用于旧 IPv4 地址的函数:

/* Generate a list of all IP addresses
   between $start and $end (inclusive). */
function 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.3.5";
print_r( ip_range($range_one, $range_two) );
于 2012-08-28T22:33:26.753 回答
3

这个怎么样:

$range_one = "1.1.1.1";
$range_two = "1.1.3.5";
$ip1 = ip2long ($range_one);
$ip2 = ip2long ($range_two);
while ($ip1 <= $ip2) {
    print_r (long2ip($ip1) . "\n");
    $ip1 ++;

}

更新:

顺便说一句,您的预期输出并不完全是一个范围。例如,在1.1.1.1is1.1.1.2和 not之后的下一个 IP 1.1.2.2

于 2012-08-28T22:29:35.490 回答
-1

您可以使用inet_ntop、inet_ pton http://www.php.net/manual/en/function.inet-ntop.php

于 2012-08-28T22:30:54.210 回答