我想检查IP是否列入白名单,但是IPv6-地址可以有不同的表示形式:
例如2001:0DB8:0:0:1::1是2001:0db8:0000:0000:0001:0000:0000:0001。
因此,字符串比较不起作用。我怎么知道两个地址相等?
使用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";)。