Capitulos de este wiki
  1. 1 IP como número entero en PHP

IP como número entero en PHP - IP como número entero en PHP

1 - IP como número entero en PHP

[editar]
Tutorial creado por Patxi Echarte. Extraido de: http://www.eslomas.com/index.php/archives/2005/05/04/ip-numero-entero-php/
27 de Abril de 2006
Cualquier direcci¨®n IP de la forma AAA.BBB.CCC.DDD tiene una representaci¨®n equivalente como n¨²mero entero. Esta transformaci¨®n se puede hacer de forma directa en PHP mediante la utilizaci¨®n de las funciones ip2long y long2ip, que pasan una ip a numero entero y un n¨²mero entero a ip, respectivamente.


Hay que tener en cuenta que la funci¨®n ip2long devuelve un n¨²mero entero que puede contener un valor negativo, por lo que puede ser necesario utilizar %u como atributo de las funci¨®n sprintf para mostrarlo como entero sin signo en algunos casos. Por otra parte hay que tener tambi¨¦n en cuenta que la direcci¨®n ip que se utilice no tiene porqu¨¦ estar completa, por lo que podemos obtener la representaci¨®n entera de direcciones como ¡°192.168¡å, que ser¨ªa equivalente a ¡°192.168.0.0¡å.

Estas funciones nos permiten realizar de forma sencilla comprobaciones sobre direcciones ip, de forma que podemos comparar direcciones y comprobar si una direcci¨®n est¨¢ en un determinado rango CIDR de forma correcta.

Comparaci¨®n de IP¡¯s


Podemos realizar comparaciones entre direcciones ip sin estar restringidos a la mera comparaci¨®n como strings, la cual no siempre funciona como podr¨ªamos esperar.

<?php
$ip_addr1 = "192.168.0.1";
$ip_addr2 = "192.168.000.001";

if($ip_addr1
$ip_addr2) echo "OK"; else echo "NOK";
?>

El c¨®digo anterior nos devolver¨ªa ¡°NOK¡±, aunque las dos direcciones en realidad son la misma. Esto se debe a que pese a representar la misma direcci¨®n IP, su representaci¨®n como string es distinta. Sin embargo el siguiente c¨®digo que utiliza la funci¨®n ip2long realiza la comparaci¨®n correctamente.

<?php
$ip_addr1 = "192.168.0.1";
$ip_addr2 = "192.168.000.001";

if(ip2long($ip_addr1)
ip2long($ip_addr2)) echo "OK"; else echo "NOK";

?>

Pertenencia a rango CIDR


Si queremos comprobar si una determinada direcci¨®n pertenece a un rango de direcciones como ¡°192.168.0.0/24¡å, podr¨ªamos utilizar la siguiente funci¨®n, que dada una direcci¨®n IP y el rango CIDR, nos devuelve true si la direcci¨®n pertenece al rango.

<?php
function matchCIDR($addr, $cidr) {
$addr should be an ip address in the format '0.0.0.0'
$cidr should be a string in the format '100/8'
list($ip, $mask) = explode('/', $cidr);
$mask = 0xffffffff << (32 - $mask);
$output = ((ip2long($addr) & $mask)
(ip2long($ip) & $mask)); return $output;
}
?>
[editar]

Sé el primero en opinar


Tutoriales relacionados con 'IP como número entero en PHP'

Cualquier dirección IP de la forma AAA. BBB.CCC.DDD tiene una representación equivalente como número entero.... Más »
Las páginas que estás viendo están alojadas en mi propio servidor (IP 217. 126.10.173), que... Más »

Autor y licencia de 'IP como número entero en PHP'

De forma general todos los contenidos de este web están sujetos a una licencia del tipo Creative Commons “Algunos derechos reservados”. Salvo que se diga lo contrario la única restricción impuesta si quieres utilizar algo de lo que aparece en este web, es la de indicar que el autor soy yo, Patxi Echarte.
Este contenido ha sido recopilado por el equipo de Wikilearning. Todo el contenido recopilado se ha obtenido respetando y comunicando en nuestro site la licencia de cada fuente.
Wikilearning tiene permiso expreso por escrito de los autores para publicar los contenidos que ha extraído de otras webs, incluyendo su uso comercial.