是的,PHP 可以处理代理。要获取用户的真实 IP 地址,即使他们通过代理访问,您可以使用 $_SERVER['HTTP_CLIENT_IP']
和 $_SERVER['HTTP_X_FORWARDED_FOR']
变量。但是,这些变量可能包含多个 IP 地址,因此您需要处理这些值以确保获取正确的 IP 地址。
以下是一个 PHP 函数,用于获取用户的真实 IP 地址,即使他们通过代理访问:
function getRealUserIp() {
if (!empty($_SERVER['HTTP_CLIENT_IP'])) {
$ip = $_SERVER['HTTP_CLIENT_IP'];
} elseif (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) {
// 取 X-Forwarded-For 中的第一个 IP 地址
$ip = explode(',', $_SERVER['HTTP_X_FORWARDED_FOR'])[0];
} else {
$ip = $_SERVER['REMOTE_ADDR'];
}
return $ip;
}
$real_ip = getRealUserIp();
echo $real_ip;
请注意,HTTP_X_FORWARDED_FOR
可能包含一个 IP 地址列表,因此我们使用 explode()
函数将其拆分为数组,并取第一个元素作为用户的真实 IP 地址。这通常是最可靠的,因为第一个 IP 地址通常是用户的真实 IP 地址,而后续的 IP 地址可能是代理服务器的 IP 地址。