PHP中是否有函数可以检测IP类型?
Is there a function in PHP from which we can detect the type of IP?
我有一个使用 IP 的 Web 应用程序。我想知道我们是否
可以使用函数来检测 PHP 中的 IP 类型(IPv4 或 IPv6)吗?
我知道我们可以通过以下方法获取 PHP 中的 IP:
if (!empty($_SERVER['HTTP_CLIENT_IP'])) {
$ip = $_SERVER['HTTP_CLIENT_IP'];
} elseif (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) {
$ip = $_SERVER['HTTP_X_FORWARDED_FOR'];
} else {
$ip = $_SERVER['REMOTE_ADDR'];
}
这给出了 IP 地址,但我找不到给出它获得的 IP 类型(IPv4、IPv6)的变量。
任何帮助或线索?
您可以使用 filter_var
来验证它是什么类型的 IP 地址
例如
filter_var('127.0.0.1', FILTER_VALIDATE_IP, FILTER_FLAG_IPV4); // true
filter_var('::1', FILTER_VALIDATE_IP, FILTER_FLAG_IPV6); // true
不要忘记 HTTP_X_FORWARDED_FOR
(或任何其他 _X_
header)很容易被欺骗。
我有一个使用 IP 的 Web 应用程序。我想知道我们是否 可以使用函数来检测 PHP 中的 IP 类型(IPv4 或 IPv6)吗?
我知道我们可以通过以下方法获取 PHP 中的 IP:
if (!empty($_SERVER['HTTP_CLIENT_IP'])) {
$ip = $_SERVER['HTTP_CLIENT_IP'];
} elseif (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) {
$ip = $_SERVER['HTTP_X_FORWARDED_FOR'];
} else {
$ip = $_SERVER['REMOTE_ADDR'];
}
这给出了 IP 地址,但我找不到给出它获得的 IP 类型(IPv4、IPv6)的变量。
任何帮助或线索?
您可以使用 filter_var
例如
filter_var('127.0.0.1', FILTER_VALIDATE_IP, FILTER_FLAG_IPV4); // true
filter_var('::1', FILTER_VALIDATE_IP, FILTER_FLAG_IPV6); // true
不要忘记 HTTP_X_FORWARDED_FOR
(或任何其他 _X_
header)很容易被欺骗。