如果2个I​​Pv6-地址相等,如何检查PHP?

gir*_*aff 0 php ipv6

我想检查IP是否列入白名单,但是IPv6-地址可以有不同的表示形式:

例如2001:0DB8:0:0:1::12001:0db8:0000:0000:0001:0000:0000:0001

因此,字符串比较不起作用。我怎么知道两个地址相等?

gir*_*aff 5

使用inet_pton

function is_ip_equal($ip1, $ip2) {
    return inet_pton($ip1) == inet_pton($ip2);
}
Run Code Online (Sandbox Code Playgroud)

(但是,这仅在未使用PHP编译PHP时才有效--disable-ipv6 option。您可以使用进行检查if (!defined('AF_INET6')) echo "IPv6 support was disabled";)。