我正在使用 PHP 构建一个网站,我想将其配置为仅检查客户端的 IPv4,但我遇到一个问题,如果客户端有 IPv6,它就会获取 IPv6。请给我一个解决方案
我用 getenv('HTTP_X_FORWARDED_FOR') 得到它,但只有在有的情况下才得到 IPv6
为了确保在 PHP 中仅获取客户端的 IPv4 地址,您可以结合使用 $_SERVER 超全局变量和检查有效的 IPv4 地址。
function getClientIPv4() {
if (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) {
$ipList = explode(',', $_SERVER['HTTP_X_FORWARDED_FOR']);
foreach ($ipList as $ip) {
$ip = trim($ip);
if (filter_var($ip, FILTER_VALIDATE_IP, FILTER_FLAG_IPV4)) {
return $ip;
}
}
}
// Fallback to the remote address if no forwarded IP is valid
if (!empty($_SERVER['REMOTE_ADDR']) && filter_var($_SERVER['REMOTE_ADDR'], FILTER_VALIDATE_IP, FILTER_FLAG_IPV4)) {
return $_SERVER['REMOTE_ADDR'];
}
return null;
}
// Usage
$clientIPv4 = getClientIPv4();
if ($clientIPv4) {
echo "Client's IPv4: " . $clientIPv4;
} else {
echo "No valid IPv4 found.";
}
此函数将检查 HTTP_X_FORWARDED_FOR 和 REMOTE_ADDR 字段中的 IPv4 地址,确保您只获得有效的 IPv4 地址。如果没有找到有效的 IPv4,将返回 null。