PHP 8.4.0 RC4 available for testing

long2ip

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

long2ipКонвертирует целое число в IPv4-адрес

Описание

long2ip(int $ip): string

Функция long2ip() генерирует интернет-адреса в формате разделённых точками чисел (то есть: aaa.bbb.ccc.ddd) из длинного целочисленного представления.

Список параметров

ip

Правильное представление адреса в виде целого числа.

Возвращаемые значения

Функция возвращает IP-адрес в виде строки или false, если возникла ошибка.

Список изменений

Версия Описание
7.1.0 Тип параметра ip изменён со строкового (string) на целочисленный (int).

Примечания

Замечание:

На 32-битных архитектурах приведение целочисленных представлений IP-адресов из строки (string) в целое число (int) не даст правильных результатов для чисел, превышающих значение константы PHP_INT_MAX.

Смотрите также

  • ip2long() - Конвертирует строку, содержащую IPv4-адрес в целое число

Добавить

Примечания пользователей 6 notes

up
5
steve at computurn dot com
6 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