Long2ip: примеры (PHP)
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
Работают с 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.
Начиная с PHP 7.1, функция использует битовую маску 0xFFFFFFFF для корректного преобразования больших чисел:
echo long2ip(4294967296);0.0.0.0 (вместо ошибки)
Расширенные примеры
// IP сохранён как BIGINT
$dbValue = 3232235777;
$ip = long2ip($dbValue);
echo $ip;192.168.2.1
$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
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
)$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.