W3docs

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

Como desenvolvedor PHP, pode ser necessário converter um endereço IP de formato legível para um inteiro longo. A função ip2long() é uma função nativa do PHP

Como desenvolvedor PHP, pode ser necessário converter um endereço IP de um formato legível para um inteiro longo. A função ip2long() é uma função nativa do PHP que realiza essa conversão. Este artigo aborda sua sintaxe, uso e considerações importantes.

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

A função ip2long() converte uma string de endereço IPv4 padrão (notação pontuada, como 192.168.0.1) em seu inteiro de 32 bits correspondente.

Um endereço IPv4 é basicamente quatro bytes. A função ip2long() empacota esses quatro bytes em um único número: o primeiro octeto torna-se o byte mais significativo, e o último octeto, o menos significativo. Assim, 127.0.0.1 torna-se 127 × 256³ + 0 × 256² + 0 × 256 + 1 = 2130706433.

Por que converter um IP em inteiro?

Armazenar endereços IP como inteiros em vez de strings tem vantagens reais:

  • Armazenamento menor: uma coluna INT UNSIGNED ocupa 4 bytes, em comparação com até 15 caracteres para a forma string.
  • Comparações e consultas de intervalo mais rápidas: verificar se um IP está dentro de um intervalo CIDR torna-se uma simples operação matemática de inteiros (WHERE ip BETWEEN :start AND :end).
  • Indexação: índices de inteiros são mais compactos e rápidos do que índices de strings.

Se você só precisa exibir o endereço, mantenha-o como string. A forma inteira compensa quando você armazena, ordena ou faz correspondência de intervalos com muitos endereços.

Como Usar a Função ip2long()

Usar a função ip2long() é simples. Veja a sintaxe:

A sintaxe PHP da Função ip2long()

ip2long($ip_address);

A função recebe um parâmetro:

  • $ip_address: O endereço IP a ser convertido em um inteiro longo.

Veja um exemplo de como usar a função ip2long() com validação adequada e formatação sem sinal:

Como Usar a Função ip2long()?

php— editable, runs on the server

Neste exemplo, convertemos o endereço IP "127.0.0.1" em um inteiro longo. Verificamos se o resultado é false (o que indica entrada inválida) e usamos sprintf('%u', ...) para exibir o valor como um inteiro sem sinal.

Conversão inversa: ip2long() e long2ip()

A função ip2long() tem uma função espelho, long2ip(), que converte o inteiro de volta em uma string pontuada. Juntas, elas realizam a conversão de forma completa:

<?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.1

Note que long2ip() aceita diretamente o valor com sinal retornado por ip2long(), portanto não é necessário converter a forma sem sinal antes de chamá-la.

Observações Importantes

  • Saída sem Sinal: ip2long() retorna um inteiro de 32 bits com sinal. Para endereços IP na faixa superior (por exemplo, 192.168.1.1), pode retornar um número negativo. Sempre use sprintf('%u', ip2long($ip)) ao armazenar ou exibir o resultado.
  • Suporte a IPv6: ip2long() suporta apenas endereços IPv4. Para IPv6, use a função inet_pton().

Conclusão

A função ip2long() oferece uma maneira simples de converter endereços IPv4 em inteiros para armazenamento ou comparação. Lembre-se de validar o valor de retorno e usar sprintf('%u', ...) para uma saída sem sinal consistente. Esperamos que este guia ajude você a implementar a conversão de endereços IP de forma eficaz em suas aplicações PHP.

Prática

Prática
O que a função PHP 'ip2long' faz?
O que a função PHP 'ip2long' faz?
Was this page helpful?