在 PHP 中,将 IPv4 和 IPv6 地址转换为整数类型可以使用不同的方法。以下是如何实现这些转换的示例。
IPv4 转换为整数
对于 IPv4 地址,可以使用 ip2long()
函数将其转换为整数。
function ipv4ToInt($ipv4) {
$result = ip2long($ipv4);
if ($result === false) {
throw new InvalidArgumentException("Invalid IPv4 address.");
}
return $result;
}
// 示例
$ipv4 = "192.168.1.1";
$intIPv4 = ipv4ToInt($ipv4);
echo "IPv4: $ipv4 -> Integer: $intIPv4\n"; // 输出: IPv4: 192.168.1.1 -> Integer: 3232235777
IPv6 转换为整数
IPv6 地址需要更复杂的处理,因为它们比 IPv4 更长。可以使用 inet_pton()
将 IPv6 地址转换为二进制格式,然后将其转换为整数。
function ipv6ToInt($ipv6) {
$binary = inet_pton($ipv6);
if ($binary === false) {
throw new InvalidArgumentException("Invalid IPv6 address.");
}
// 将二进制字符串转换为十六进制,然后再转换为整数
$intIPv6 = gmp_import($binary);
return $intIPv6;
}
// 示例
$ipv6 = "2001:0db8:85a3:0000:0000:8a2e:0370:7334";
$intIPv6 = ipv6ToInt($ipv6);
echo "IPv6: $ipv6 -> Integer: $intIPv6\n"; // 输出: IPv6: 2001:0db8:85a3:0000:0000:8a2e:0370:7334 -> Integer: 42540766411256099
总结
- IPv4: 使用
ip2long()
函数进行转换。 - IPv6: 使用
inet_pton()
将地址转换为二进制格式,然后使用gmp_import()
将其转换为整数。
这两个函数提供了简单的方式来处理 IPv4 和 IPv6 地址的整数转换。确保在处理 IPv6 地址时使用 GMP 扩展,因为它可以处理大整数。