PHP生成IP范围

PHP生成IP范围,php,function,loops,range,explode,Php,Function,Loops,Range,Explode,如您所知,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()函

如您所知,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()函数来分解“.”并将每个数字分开,然后对每个数字使用range,然后将它们组合在一起,这对我来说似乎有点复杂,我想有一种更简单的方法来实现它

$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 ++;

}
$range_one=“1.1.1.1”;
$range_two=“1.1.3.5”;
$ip1=IP2长($1范围);
$ip2=ip2long($range_-two);

虽然($ip1您可以使用inet\u ntop,但inet\u pton

可以用于将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) );

您必须亲自查看结果,结果类似无穷大,与我之前提到的结果不同。它忽略给定的第二个范围。请查看答案的更新,它不是无穷大。您预期的输出缺少该范围内的几个IP地址。太好了!!帮了我很多忙!谢谢!