如您所知,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()函数来爆炸" 。 "并将每个数字分开,然后将它们各自使用范围,然后将它们组合在一起,这对我来说似乎有点复杂,我想有更简单的方法来做到这一点
答案 0 :(得分:10)
您可以使用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) );
答案 1 :(得分: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.1
之后的下一个IP是1.1.1.2
而不是1.1.2.2
。
答案 2 :(得分:-1)
您可以使用inet_ntop,inet_ pton http://www.php.net/manual/en/function.inet-ntop.php