2012-08-28 16 views
5

Jak wiadomo, funkcja zakres() można uzyskać zakres pomiędzy liczbą a drugi,PHP Generowanie zakresów IP

jak zrobić to samo z IP
jak np ..

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

Myślałem o użyciu funkcji explode(), aby rozbić "." i oddzielić każdą liczbę, a następnie użyć zakresu z każdym z nich, po czym połączyć je wszystkie razem, wydaje mi się to nieco skomplikowane i wydaje mi się, że jest to łatwiejsza metoda.

Odpowiedz

8

Można użyć ip2long do konwersji adresów IP do liczb całkowitych. Oto funkcja, która działa na starych adresów 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

Perfect !! Pomogła mi tona! Dzięki! –

3

Co powiesz na to:

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

} 

Aktualizacja:

BTW, twój oczekiwany wynik nie jest dokładnie zakres. Na przykład następnym IP po 1.1.1.1 jest 1.1.1.2, a nie 1.1.2.2.

+0

trzeba zobaczyć wynik siebie, to kończy się jak wyniki nieskończoności i nie lubią, jak już wspomniałem, także .. ignoruje dany drugi zakres – Osa

+0

Zobacz zaktualizuj odpowiedź, jej nieskończoność. W oczekiwanym wyniku brakowało kilku adresów IP z tego zakresu. – jman

+0

yah widzę teraz punkt, świetnie .. dzięki – Osa