Función PHP ip2long(): Todo lo que necesitas saber
Como desarrollador PHP, puede que necesites convertir una dirección IP de formato legible a un entero largo. ip2long() es una función integrada de PHP.
Como desarrollador PHP, puede que necesites convertir una dirección IP de un formato legible por humanos a un entero largo. La función ip2long() es una función integrada de PHP que realiza esta conversión. Este artículo cubre su sintaxis, uso y advertencias importantes.
¿Qué es la función ip2long()?
La función ip2long() convierte una cadena de dirección IPv4 estándar (notación de cuatro octetos separados por puntos, como 192.168.0.1) en su correspondiente entero de 32 bits.
Una dirección IPv4 no es más que cuatro bytes. ip2long() empaqueta esos cuatro bytes en un único número: el primer octeto se convierte en el byte más significativo y el último octeto en el menos significativo. Así, 127.0.0.1 se convierte en 127 × 256³ + 0 × 256² + 0 × 256 + 1 = 2130706433.
¿Por qué convertir una IP a un entero?
Almacenar direcciones IP como enteros en lugar de cadenas tiene ventajas reales:
- Menor almacenamiento: una columna
INT UNSIGNEDocupa 4 bytes frente a los hasta 15 caracteres de la forma como cadena. - Comparaciones y consultas de rango más rápidas: comprobar si una IP cae dentro de un rango CIDR se convierte en simple aritmética de enteros (
WHERE ip BETWEEN :start AND :end). - Indexación: los índices de enteros son más compactos y rápidos que los índices de cadenas.
Si solo necesitas mostrar la dirección, mantenla como cadena. La forma entera resulta beneficiosa cuando almacenas, ordenas o realizas búsquedas por rango en muchas direcciones.
Cómo usar la función ip2long()
Usar la función ip2long() es sencillo. Aquí está la sintaxis:
La sintaxis PHP de la función ip2long()
ip2long($ip_address);La función toma un parámetro:
$ip_address: La dirección IP que se va a convertir a un entero largo.
Aquí hay un ejemplo de cómo usar la función ip2long() con validación adecuada y formato sin signo:
¿Cómo usar la función ip2long()?
En este ejemplo, convertimos la dirección IP "127.0.0.1" a un entero largo. Comprobamos si el resultado es false (lo que indica una entrada no válida) y usamos sprintf('%u', ...) para mostrar el valor como un entero sin signo.
Conversión inversa: ip2long() y long2ip()
ip2long() tiene una función espejo, long2ip(), que convierte el entero de vuelta a una cadena con puntos. Juntas forman un ciclo completo:
<?php
$ip = "192.168.1.1";
$int = ip2long($ip); // signed 32-bit value
$stored = sprintf('%u', $int); // unsigned string for storage: 3232235777
echo $stored . "\n"; // 3232235777
echo long2ip($int) . "\n"; // 192.168.1.1Ten en cuenta que long2ip() acepta directamente el valor con signo devuelto por ip2long(), por lo que no necesitas convertir la forma sin signo antes de llamarla.
Notas importantes
- Salida sin signo:
ip2long()devuelve un entero con signo de 32 bits. Para direcciones IP en el rango superior (por ejemplo,192.168.1.1), puede devolver un número negativo. Usa siempresprintf('%u', ip2long($ip))al almacenar o mostrar el resultado. - Soporte de IPv6:
ip2long()solo admite direcciones IPv4. Para IPv6, usa la funcióninet_pton()en su lugar.
Conclusión
La función ip2long() ofrece una forma sencilla de convertir direcciones IPv4 a enteros para almacenamiento o comparación. Recuerda validar el valor de retorno y usar sprintf('%u', ...) para obtener una salida sin signo consistente. Esperamos que esta guía te ayude a implementar la conversión de direcciones IP de manera efectiva en tus aplicaciones PHP.