PHP 8.4.0 RC3 available for testing

long2ip

(PHP 4, PHP 5, PHP 7, PHP 8)

long2ipConverte um endereço inteiro longo em uma string no formato padrão com pontos da Internet (IPv4)

Descrição

long2ip(int $ip): string

A função long2ip() gera um endereço de Internet em formato com pontos (ou seja: aaa.bbb.ccc.ddd) a partir da representação de inteiro longo.

Parâmetros

ip

Uma representação de endereço adequada em número inteiro longo.

Valor Retornado

Retorna o endereço IP da Internet como uma string, ou false em caso de falha.

Registro de Alterações

Versão Descrição
7.1.0 O tipo do parâmetro ip foi alterado de string para int.

Notas

Nota:

Em arquiteturas de 32 bits, converter representações inteiras de endereços IP de string para int não fornecerá resultados corretos para números que excedam PHP_INT_MAX.

Veja Também

  • ip2long() - Converte uma string contendo um endereço com pontos do protocolo da Internet (IPv4) em um número inteiro longo

adicione uma nota

Notas Enviadas por Usuários (em inglês) 6 notes

up
5
steve at computurn dot com
5 years ago
For a 32bit safe long2ip, which can accept string or signed integer input, try:

function safelong2ip($long) {
$binStr = sprintf("%032s", decbin((float)$long));
if (strlen($binStr) != 32) {
throw new Exception("Invalid IPv4 subnet!");
}

$ipArr = [];
for ($i = 0; $i < 4; ++$i) {
$ipArr[] = bindec(substr($binStr, $i*8, 8));
}

return implode('.', $ipArr);
}
up
9
Gabriel Malca
18 years ago
If the function doesn't exist:

<?
if (!function_exists("long2ip")) {
function long2ip($long) {
// Valid range: 0.0.0.0 -> 255.255.255.255
if ($long < 0 || $long > 4294967295) return false;
$ip = "";
for ($i=3;$i>=0;$i--) {
$ip .= (int)($long / pow(256,$i));
$long -= (int)($long / pow(256,$i))*pow(256,$i);
if ($i>0) $ip .= ".";
}
return $ip;
}
}
?>
up
2
Tom Crosley
21 years ago
I wanted to be able to pass an IP address in a URL always as an unsigned int. I then converted it back as shown below:

$ip_addr = "192.168.100.25"; // example IP address that converts to neg #

$s32int = ip2long($ip_addr);

$us32str = sprintf("%u",$s32int); // convert to unsigned string

// display orig IP address, signed 32 bit version, unsigned 32 bit ver,
// finally converted back to IP addr

printf("%s ,%d, %s, %s", $ip_addr, $s32int, $us32str,
long2ip(-(4294967296-$us32str)));

// tested on Linux/Apache PHP 4.1.2
up
1
Rolf
3 years ago
an Anonymous wrote several years ago that you should cast the parameter to float to make sure that you get the right result on 32-bit machines. That probably never worked.

But the idea is on a good track: to convert a bitstring into an ip, use

$ip = long2ip((int)bindec($bits));

This works on 32- and 64-bit machines.
up
0
klawd at kamundo dot de
12 years ago
Use these two functions to convert from and to numbers compatible to MySQLs INET_ATON and INET_NTOA
<?php
function convertIpToString($ip)
{
$long = 4294967295 - ($ip - 1);
return
long2ip(-$long);
}
function
convertIpToLong($ip)
{
return
sprintf("%u", ip2long($ip));
}
?>
up
-2
Anonymous
13 years ago
If you're running a 32 bit machine you can get wrong IPs. To prevent from this just cast to float e.g.

<?php
long2Ip32bit
($ip){
return
long2ip((float)$ip);
}
?>
To Top