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 UNSIGNEDocupa 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()?
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.1Note 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 usesprintf('%u', ip2long($ip))ao armazenar ou exibir o resultado. - Suporte a IPv6:
ip2long()suporta apenas endereços IPv4. Para IPv6, use a funçãoinet_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.