2012-08-28 5 views
5

Come si sa, la funzione range() può ottenere una gamma tra il numero e l'altro,PHP Genera IP Ranges

come fare la stessa cosa con un IP
come ad esempio ..

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

stavo pensando di usare la funzione explode() per esplodere "." e separare ogni numero, quindi utilizzare l'intervallo con ciascuno di essi dopo averli combinati tutti insieme, sembra un po 'complicato per me e credo che ci sia un metodo più semplice per farlo

risposta

8

È possibile utilizzare ip2long per convertire gli indirizzi IP in numeri interi. Ecco una funzione che funziona per i vecchi indirizzi 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

Perfetto !! Mi ha aiutato un sacco! Grazie! –

3

Che ne dici di questo:

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

} 

Aggiornamento:

BTW, l'output previsto non è esattamente un intervallo. Ad esempio, il prossimo IP dopo lo 1.1.1.1 è 1.1.1.2 e non 1.1.2.2.

+0

bisogna vedere il risultato da soli, si finisce con risultati infinito come e non piace come ho già detto, anche .. ignora il dato secondo intervallo – Osa

+0

Vedere le aggiornamento alla risposta, non è infinito. L'output previsto mancava di diversi indirizzi IP nell'intervallo. – jman

+0

yah vedo il punto ora, ottimo .. grazie – Osa