Función PHP long2ip(): Todo lo que necesitas saber
Aprende a usar la función long2ip() de PHP para convertir un entero largo que representa una dirección IP al formato legible de puntos y dígitos.
Una dirección IPv4 como 127.0.0.1 es, internamente, solo un número de 32 bits. Las bases de datos y los protocolos binarios suelen almacenar las direcciones en esa forma entera compacta porque comparar e indexar un entero es más rápido y ocupa menos espacio que comparar una cadena. Cuando recuperas ese valor, necesitas convertirlo al familiar formato de cuatro grupos separados por puntos que los humanos reconocen. La función incorporada long2ip() de PHP realiza exactamente esa conversión.
Este capítulo explica qué hace la función, cómo se mapean los enteros a las direcciones IPv4, el problema con los enteros con signo que eventualmente encontrarás, y dónde es verdaderamente útil esta función.
¿Qué es la función long2ip()?
long2ip() convierte un entero de 32 bits que codifica una dirección IPv4 en su cadena de cuatro grupos separados por puntos legible por humanos (por ejemplo, 192.168.0.1).
Un formato de cuatro grupos son cuatro números de 8 bits (cada uno entre 0 y 255) unidos por puntos. Como cada octeto es un byte, la dirección completa cabe en 4 bytes = 32 bits. long2ip() simplemente divide ese entero de vuelta en cuatro bytes:
3232235521 -> 11000000.10101000.00000000.00000001 -> 192.168.0.1
192 168 0 1Sintaxis
long2ip(int $ip): string$ip— el entero de 32 bits que representa la dirección IPv4. Debe ser unint; pasar una cadena lanza unTypeErroren PHP 8+.- Valor de retorno — la dirección como una
stringde cuatro grupos separados por puntos.
Ejemplo básico
El entero 2130706433 se decodifica como la dirección de loopback 127.0.0.1, que echo imprime en pantalla.
Más ejemplos
Algunos valores comunes hacen el mapeo más claro:
<?php
echo long2ip(0), "\n"; // 0.0.0.0 (lowest possible)
echo long2ip(3232235521), "\n"; // 192.168.0.1 (private LAN)
echo long2ip(4294967295), "\n"; // 255.255.255.255 (highest possible)0 es el valor de 32 bits más pequeño y se mapea a 0.0.0.0; 4294967295 (que es 2^32 - 1) es el más grande y se mapea al 255.255.255.255 de tipo broadcast.
Conversión inversa con ip2long()
long2ip() es la función inversa de ip2long(), que convierte una cadena de cuatro grupos separados por puntos en su forma entera. Las dos funciones se deshacen mutuamente:
<?php
$ip = "8.8.8.8";
$long = ip2long($ip); // 134744072
echo long2ip($long); // 8.8.8.8 — back where we startedEste par es el flujo de trabajo típico: almacena ip2long($address) como una columna entera en tu base de datos y luego llama a long2ip() cuando necesitas mostrarla o registrarla.
El problema con los enteros con signo
En una plataforma de 32 bits, ip2long() puede devolver un número negativo para las direcciones por encima de 127.x.x.x, porque el bit más significativo se interpreta como signo. También puedes ver valores negativos si un entero se almacenó en una columna de base de datos con signo. long2ip() acepta estos valores con signo y los decodifica correctamente de todas formas:
<?php
echo long2ip(-1); // 255.255.255.255Por lo tanto, no necesitas "corregir" un entero negativo antes de pasarlo a long2ip(), pero ten en cuenta de dónde proviene el valor negativo, y prefiere plataformas de 64 bits (las predeterminadas hoy en día) donde se preserva el valor sin signo.
¿Cuándo usaría esto?
- Almacenar direcciones de forma eficiente — una columna
INT UNSIGNED(oBIGINT) es más pequeña y más rápida de indexar que unVARCHAR(15), y el filtrado por rangos de IP (WHERE ip BETWEEN ? AND ?) se convierte en simple aritmética de enteros. - Leer datos binarios — los protocolos y las cabeceras de paquetes llevan las direcciones como enteros crudos de 32 bits;
long2ip()los hace legibles. - Registro y analíticas — convierte los enteros almacenados de vuelta a cadenas solo en el momento de mostrarlos.
Para IPv6, long2ip() no aplica — las direcciones IPv6 son de 128 bits. Usa inet_ntop() / inet_pton() en su lugar, que manejan tanto IPv4 como IPv6. Consulta el capítulo de funciones de red de PHP para un resumen.
Conclusión
long2ip() convierte un entero de 32 bits de vuelta en una dirección IPv4 legible por humanos, el complemento natural de ip2long(). Combina las dos para almacenar direcciones de forma compacta como enteros mientras las muestras como cadenas familiares de cuatro grupos separados por puntos, y recuerda que la función gestiona de forma transparente los enteros con signo que los sistemas de 32 bits a veces producen.