Karp 的技术博客

2024-09-28T08:51:39.png

在 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 扩展,因为它可以处理大整数。

ip

版权属于:karp
作品采用:本作品采用 知识共享署名-相同方式共享 4.0 国际许可协议 进行许可。
更新于: 2024年10月16日 05:37
2

目录

来自 《 IPv4 和 IPv6 地址转换为整数类型》