W3docs

Função PHP long2ip(): Tudo o Que Você Precisa Saber

Aprenda a usar a função long2ip() do PHP para converter um inteiro longo em um endereço IPv4 legível no formato dotted-quad, com exemplos práticos.

Um endereço IPv4 como 127.0.0.1 é, por baixo dos panos, apenas um número de 32 bits. Bancos de dados e protocolos binários frequentemente armazenam endereços nessa forma compacta de inteiro, pois comparar e indexar um inteiro é mais rápido e ocupa menos espaço do que comparar uma string. Ao ler esse valor de volta, é necessário convertê-lo para a familiar notação dotted-quad que os humanos reconhecem. A função embutida long2ip() do PHP faz exatamente essa conversão.

Este capítulo explica o que a função faz, como os inteiros mapeiam para endereços IPv4, o problema de inteiros com sinal que você eventualmente encontrará, e onde a função é genuinamente útil.

O que é a Função long2ip()?

long2ip() converte um inteiro de 32 bits que codifica um endereço IPv4 em sua string dotted-quad legível por humanos (por exemplo, 192.168.0.1).

Um dotted-quad é formado por quatro números de 8 bits (cada um de 0 a 255) separados por pontos. Como cada octeto ocupa um byte, o endereço completo cabe em 4 bytes = 32 bits. long2ip() simplesmente divide esse inteiro de volta em quatro bytes:

3232235521  ->  11000000.10101000.00000000.00000001  ->  192.168.0.1
                 192        168       0          1

Sintaxe

long2ip(int $ip): string
  • $ip — o inteiro de 32 bits que representa o endereço IPv4. Deve ser um int; passar uma string lança um TypeError no PHP 8+.
  • Valor de retorno — o endereço como uma string dotted-quad.

Exemplo Básico

php— editable, runs on the server

O inteiro 2130706433 é decodificado para o endereço de loopback 127.0.0.1, que o echo imprime na tela.

Mais Exemplos

Alguns valores comuns deixam o mapeamento mais 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 é o menor valor de 32 bits e mapeia para 0.0.0.0; 4294967295 (que é 2^32 - 1) é o maior e mapeia para o 255.255.255.255 do tipo broadcast.

Round-tripping com ip2long()

long2ip() é o inverso de ip2long(), que converte uma string dotted-quad em sua forma inteira. As duas funções se desfazem mutuamente:

<?php

$ip   = "8.8.8.8";
$long = ip2long($ip);        // 134744072
echo long2ip($long);         // 8.8.8.8 — back where we started

Esse par é o fluxo de trabalho típico: armazene ip2long($address) como uma coluna inteira no seu banco de dados e, em seguida, chame long2ip() quando precisar exibir ou registrar o valor.

O problema com inteiros com sinal

Em uma plataforma de 32 bits, ip2long() pode retornar um número negativo para endereços acima de 127.x.x.x, pois o bit mais significativo é interpretado como sinal. Você também pode encontrar valores negativos se um inteiro foi armazenado em uma coluna de banco de dados com sinal. long2ip() aceita esses valores com sinal e ainda os decodifica corretamente:

<?php

echo long2ip(-1); // 255.255.255.255

Portanto, não é necessário "corrigir" um inteiro negativo antes de passá-lo para long2ip() — mas esteja ciente de onde o valor negativo veio, e prefira plataformas de 64 bits (o padrão hoje) onde o valor sem sinal é preservado.

Quando usar isso?

  • Armazenar endereços de forma eficiente — uma coluna INT UNSIGNED (ou BIGINT) é menor e mais rápida para indexar do que um VARCHAR(15), e a filtragem por intervalo de IP (WHERE ip BETWEEN ? AND ?) se torna uma simples operação matemática com inteiros.
  • Lendo dados binários — protocolos e cabeçalhos de pacotes carregam endereços como inteiros brutos de 32 bits; long2ip() os torna legíveis.
  • Logging e analytics — converta inteiros armazenados de volta para strings apenas no momento da exibição.

Para IPv6, long2ip() não se aplica — endereços IPv6 têm 128 bits. Use inet_ntop() / inet_pton() em vez disso, que tratam tanto IPv4 quanto IPv6. Consulte o capítulo sobre funções de rede PHP para uma visão geral.

Conclusão

long2ip() transforma um inteiro de 32 bits de volta em um endereço IPv4 legível por humanos, sendo o complemento natural de ip2long(). Use as duas funções juntas para armazenar endereços de forma compacta como inteiros enquanto ainda os exibe como familiares strings dotted-quad, e lembre-se de que a função lida transparentemente com os inteiros com sinal que sistemas de 32 bits às vezes produzem.

Prática

Prática
O que a função PHP long2ip() faz?
O que a função PHP long2ip() faz?
Was this page helpful?