2012-08-28 30 views
5

Como saben, la función range() puede obtener un rango entre el número y el otro,PHP Generar Rangos IP

cómo hacer lo mismo con una IP
como ejemplo ..

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

Estaba pensando en usar la función de explosión() para explotar "." y separar cada número, luego usar el rango con cada uno de ellos después de combinarlos, parece un poco complicado para mí y creo que hay un método más fácil para hacerlo

Respuesta

8

Puede utilizar ip2long para convertir las direcciones IP en enteros. He aquí una función que trabaja para antiguas direcciones 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

¡Perfecto! ¡Me ayudó mucho! ¡Gracias! –

3

Qué tal esto:

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

} 

Actualización:

Por cierto, el resultado esperado no es exactamente un rango. Por ejemplo, la siguiente dirección IP después de 1.1.1.1 es y no 1.1.2.2.

+0

que tiene que ver el resultado mismo, termina con resultados infinito como y no como la forma en que he mencionado, también .. no tiene en cuenta el segundo rango dado – Osa

+0

Ver la actualizar a la respuesta, no es infinito. A su salida esperada le faltaban varias direcciones IP en el rango. – jman

+0

yah ya veo el punto, genial ... gracias – Osa