2012-08-28 143 views
5

如你所知,範圍()函數可以得到數量和其他之間的範圍內,PHP生成的IP範圍

如何做同樣的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()函數來爆炸「。」,並將每個數字分開,然後在將它們結合在一起後使用範圍,這對我來說似乎有點複雜,我想有一種更簡單的方法可以做到這一點

回答

8

您可以使用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)); 
+0

完美!幫我出去了!謝謝! –

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

+0

你必須自己看到的結果,它類似於無窮大的結果結束了,而不是像我怎麼提及,也..它忽視了給予第二範圍 – Osa

+0

見更新到答案,它不是無限的。您的預期輸出缺少範圍內的多個IP地址。 – jman

+0

嗯我現在看到了這一點,很好..謝謝 – Osa