2012-08-28 14 views
5

Bildiğiniz gibi, aralık() işlevi sayı ve diğer arasında bir dizi alabilirsiniz Aralıkları üretPHP .. <p></p> bir IP örneği olarak <br> ile aynı nasıl yapılacağı, 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 
*/ 

"." patlatmak için explode() işlevini kullanmayı düşünüyordum ve her bir sayıyı ayırdıktan sonra bunların hepsini bir araya getirdikten sonra her birini kullanmam gerekiyordu, benim için biraz karmaşık görünüyor ve sanırım bunu yapmak için daha kolay bir yöntem var.

cevap

8

inet_, inet_ntop kullanabilir. İşte eski IPv4 adresleri için çalışan bir fonksiyon var: Eğer bir sonuç kendinizi görmek zorunda

/* 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

Mükemmel !! Bana bir ton yardımcı oldu! Teşekkürler! –

3

Buna ne dersin:

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

} 

Güncelleme:

BTW, beklenen çıkışı tam olarak bir dizi değil. Örneğin, 1.1.1.1'dan sonraki IP, 1.1.1.2 ve 1.1.2.2 değil.

+0

, bu gibi sonsuzluk sonuçları ile biter ve ben söz gibi olmuyor, aynı zamanda .. o verilen ikinci aralık – Osa

+0

Bkz yok sayar cevabı güncelleştir, sonsuz değil. Beklenen çıktınız aralıkta birkaç IP adresi eksikti. – jman

+0

yah şimdiki noktayı görüyorum, teşekkürler .. teşekkürler – Osa

İlgili konular