2012-08-28 31 views
5

Wie Sie wissen, range() Funktion einen Bereich zwischen der Anzahl und dem anderen bekommen können,PHP generieren IP-Bereiche

wie man das gleiche mit einer IP-
als Beispiel zu tun ..

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

Ich dachte daran, die explode() -Funktion zu verwenden, um "." zu explodieren und jede Zahl zu trennen, dann die Entfernung mit jeder von ihnen zu verwenden, danach alle zusammen zu kombinieren, es erscheint mir etwas komplizierter und ich denke, es gibt eine einfachere Methode

Antwort

8

Sie ip2long verwenden können, die IP-Adressen in ganze Zahlen zu umwandeln. Hier ist eine Funktion, die für alte IPv4-Adressen funktioniert:

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

Perfekt !! Hat mir eine Menge geholfen! Vielen Dank! –

3

Wie wäre es damit:

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

} 

Update:

BTW, ist Ihre erwartete Ausgabe nicht gerade ein Bereich. Zum Beispiel ist die nächste IP nach 1.1.1.11.1.1.2 und nicht 1.1.2.2.

+0

Sie haben das Ergebnis selbst zu sehen, es endet mit wie unendlich Ergebnisse und nicht, wie ich bereits erwähnt, auch .. es ignoriert der gegebene zweite Bereich – Osa

+0

Siehe Update auf die Antwort, es ist nicht unendlich. Der erwarteten Ausgabe fehlten mehrere IP-Adressen im Bereich. – jman

+0

yah ich sehe den Punkt jetzt, groß .. danke – Osa

Verwandte Themen