PHP数字IP转IP
在 PHP 中,将数字 IP(即 IPv4 地址的 32 位整数表示)转换为常见的点分十进制格式,可以直接使用内置函数 long2ip()。
基本用法
$ipInt = 2130706433; // 对应 127.0.0.1
echo long2ip($ipInt); // 输出:127.0.0.1注意事项
整数范围:long2ip() 接受一个 32 位无符号整数(0 ~ 4294967295)。如果传入的值超出此范围,会因截断或溢出产生意外结果。
有符号整数问题:在 32 位系统上,PHP 的整数可能是有符号的,若数字大于 2147483647,可能被视为负数。此时可以先用 sprintf('%u', $int) 将其转为无符号字符串再调用:
$int = -1062731515; // 例如某些数据库存储的有符号值
echo long2ip(sprintf('%u', $int)); // 正确还原为 192.168.1.1反向操作:ip2long() 可将点分 IP 转为整数。
手动实现(备选)
若需了解底层原理,也可通过位运算实现:
function ipFromInt($int) {
return sprintf(
'%d.%d.%d.%d',
($int >> 24) & 0xFF,
($int >> 16) & 0xFF,
($int >> 8) & 0xFF,
$int & 0xFF
);
}对于 IPv6
IPv6 的“数字”表示通常为十六进制字符串或二进制,转换需使用 inet_ntop() 配合 inet_pton(),但官方没有直接的整数转换函数。若为二进制数据:
$binary = inet_pton('2001:db8::1');
echo inet_ntop($binary); // 还原为 2001:db8::1如果您的“数字 IP”特指 IPv6 的大整数,可使用 gmp 或 bcmath 扩展处理,但转换较复杂,通常按需查阅文档。
总结:对于 IPv4,直接使用 long2ip() 即可;注意整数类型和范围即可轻松完成转换。
最新评论 (0/10)