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)互联网协议点分十进制地址的字符串转换为长整型

添加注释

用户贡献的注释 7 个注释

5
steve at computurn dot com
5 年前
对于可以接受字符串或带符号整数输入的 32 位安全 long2ip,请尝试

function safelong2ip($long) {
$binStr = sprintf("%032s", decbin((float)$long));
if (strlen($binStr) != 32) {
throw new Exception("无效的 IPv4 子网!");
}

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

return implode('.', $ipArr);
}
9
Gabriel Malca
18 年前
如果函数不存在

<?
if (!function_exists("long2ip")) {
function long2ip($long) {
// 有效范围: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;
}
}
?>
1
Rolf
3 年前
几年前,一位匿名用户写道,您应该将参数强制转换为浮点数,以确保您在 32 位机器上获得正确的结果。那可能从未奏效。

但是这个想法走在正确的轨道上:要将一个位字符串转换为 IP,请使用

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

这在 32 位和 64 位机器上都有效。
1
Tom Crosley
21 年前
我想能够始终在 URL 中以无符号整数形式传递 IP 地址。然后,我将其转换回来,如下所示

$ip_addr = "192.168.100.25"; // 例如,转换为负数的 IP 地址

$s32int = ip2long($ip_addr);

$us32str = sprintf("%u",$s32int); // 转换为无符号字符串

// 显示原始 IP 地址、带符号 32 位版本、无符号 32 位版本、
// 最后转换回 IP 地址

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

// 在 Linux/Apache PHP 4.1.2 上测试
0
klawd at kamundo dot de
12 年前
使用这两个函数在与 MySQL 的 INET_ATON 和 INET_NTOA 兼容的数字之间进行转换
<?php
function convertIpToString($ip)
{
$long = 4294967295 - ($ip - 1);
return
long2ip(-$long);
}
function
convertIpToLong($ip)
{
return
sprintf("%u", ip2long($ip));
}
?>
-2
Anonymous
13 年前
如果您运行的是 32 位机器,您可能会获得错误的 IP。要防止这种情况,只需强制转换为浮点数,例如

<?php
long2Ip32bit
($ip){
return
long2ip((float)$ip);
}
?>
-11
php dot net at davidstockton dot com
15 年前
注意处理无效值时,您可能会根据操作系统获得不同的值。例如

$ip = long2ip(pow(2,32)+1024);

在 Windows 上,您得到 255.255.255.255。在 Linux 上,它是 0.0.4.0。

因此,似乎重要的是要确保您要转换的长整型在正确的范围内。
To Top