Long2ip: примеры (PHP)

Функция long2ip — преобразование числового формата в IPv4
Раздел: Сетевые функции
long2ip(int $ip): string|false

Функция long2ip в PHP

Назначение и описание

Функция long2ip() преобразует целочисленное представление адреса (long) в строковый формат IPv4 с точками. Используется для работы с IP-адресами, хранящимися в базе данных в виде чисел или полученными из систем, использующих числовой формат.

Синтаксис и аргументы
string long2ip(int $ip)

Принимает один обязательный аргумент:

  • $ip (int) — целое число, представляющее IP-адрес. В 32-битных системах поддерживает диапазон от 0 до 4294967295. В 64-битных — полный диапазон беззнаковых 32-битных чисел.

Простые примеры

Базовое преобразование

Пример преобразования чисел в IPv4-адрес:

echo long2ip(2130706433);
127.0.0.1
echo long2ip(3232235521);
192.168.1.1
Граничные значения
echo long2ip(0);
0.0.0.0
echo long2ip(4294967295);
255.255.255.255

Похожие функции в PHP

Обратная функция, преобразует строку IPv4 в целое число. Может возвращать false при неверном формате адреса.

echo ip2long('192.168.1.1');
3232235521
inet_pton() и inet_ntop()

Работают с IPv4 и IPv6. inet_pton() преобразует строку в упакованный формат, inet_ntop() выполняет обратное преобразование.

echo inet_ntop(inet_pton('192.168.1.1'));
192.168.1.1

Для IPv4 предпочтительнее использовать long2ip/ip2long из-за простоты. Для IPv6 или кросс-протокольных решений — семейство inet_*.

Типичные ошибки

Отрицательные числа

На 32-битных системах отрицательные числа интерпретируются как беззнаковые:

echo long2ip(-1062731775);
192.168.1.1 (на 32-битной системе)
Числа вне диапазона

На 64-битных системах число обрезается до 32 бит:

echo long2ip(4294967296);
0.0.0.0
Некорректный тип данных
echo long2ip('invalid');
Warning: long2ip() expects parameter 1 to be int, string given

Изменения в версиях PHP

Функция остаётся стабильной с ранних версий. В PHP 7.1+ на 64-битных системах корректно обрабатывает числа больше 32 бит через маску. В PHP 8.0 усилена типизация — строгая проверка типа int.

Поведение на 64-битных системах

Начиная с PHP 7.1, функция использует битовую маску 0xFFFFFFFF для корректного преобразования больших чисел:

echo long2ip(4294967296);
0.0.0.0 (вместо ошибки)

Расширенные примеры

Восстановление адреса из базы данных
Пример php
// IP сохранён как BIGINT
$dbValue = 3232235777;
$ip = long2ip($dbValue);
echo $ip;
192.168.2.1
Генерация диапазона адресов
Пример php
$start = ip2long('192.168.1.1');
$end = $start + 10;
for ($i = $start; $i <= $end; $i++) {
    echo long2ip($i) . "\n";
}
192.168.1.1
192.168.1.2
...
192.168.1.11
Обработка CIDR-диапазона
Пример php
function cidrToRange($cidr) {
    list($ip, $mask) = explode('/', $cidr);
    $start = ip2long($ip) & (~((1 << (32 - $mask)) - 1));
    $end = $start + (1 << (32 - $mask)) - 1;
    return [long2ip($start), long2ip($end)];
}
print_r(cidrToRange('192.168.1.0/24'));
Array
(
    [0] => 192.168.1.0
    [1] => 192.168.1.255
)
Преобразование массива чисел
Пример php
$numbers = [2130706433, 3232235521, 16843009];
$ips = array_map('long2ip', $numbers);
print_r($ips);
Array
(
    [0] => 127.0.0.1
    [1] => 192.168.1.1
    [2] => 1.1.1.1
)

Аналоги в других языках

Long2ip в Python

import socket, struct
print(socket.inet_ntoa(struct.pack('!I', 3232235521)))
192.168.1.1

Long2ip в Javascript

function longToIp(long) {
    return [(long >> 24) & 255, (long >> 16) & 255, (long >> 8) & 255, long & 255].join('.');
}
console.log(longToIp(3232235521));
192.168.1.1

Long2ip в MySQL

SELECT INET_NTOA(3232235521);
192.168.1.1

В отличие от PHP, Python и JavaScript требуют дополнительных операций для преобразования. MySQL имеет встроенную функцию INET_NTOA.

PHP long2ip function comments

En
Long2ip Converts an long integer address into a string in (IPv4) Internet standard dotted format