W3docs

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          1

Sintaxis

long2ip(int $ip): string
  • $ip — el entero de 32 bits que representa la dirección IPv4. Debe ser un int; pasar una cadena lanza un TypeError en PHP 8+.
  • Valor de retorno — la dirección como una string de cuatro grupos separados por puntos.

Ejemplo básico

php— editable, runs on the server

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 started

Este 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.255

Por 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 (o BIGINT) es más pequeña y más rápida de indexar que un VARCHAR(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.

Práctica

Práctica
¿Qué hace la función long2ip() de PHP?
¿Qué hace la función long2ip() de PHP?
Was this page helpful?