如何在 PHP 中仅获取 IPv4

问题描述 投票:0回答:1

我正在使用 PHP 构建一个网站,我想将其配置为仅检查客户端的 IPv4,但我遇到一个问题,如果客户端有 IPv6,它就会获取 IPv6。请给我一个解决方案

我用 getenv('HTTP_X_FORWARDED_FOR') 得到它,但只有在有的情况下才得到 IPv6

php laravel
1个回答
0
投票

为了确保在 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。

© www.soinside.com 2019 - 2024. All rights reserved.