是的,PHP 可以處理代理。要獲取用戶的真實(shí) IP 地址,即使他們通過代理訪問,您可以使用 $_SERVER['HTTP_CLIENT_IP']
和 $_SERVER['HTTP_X_FORWARDED_FOR']
變量。但是,這些變量可能包含多個(gè) IP 地址,因此您需要處理這些值以確保獲取正確的 IP 地址。
以下是一個(gè) PHP 函數(shù),用于獲取用戶的真實(shí) IP 地址,即使他們通過代理訪問:
function getRealUserIp() {
if (!empty($_SERVER['HTTP_CLIENT_IP'])) {
$ip = $_SERVER['HTTP_CLIENT_IP'];
} elseif (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) {
// 取 X-Forwarded-For 中的第一個(gè) IP 地址
$ip = explode(',', $_SERVER['HTTP_X_FORWARDED_FOR'])[0];
} else {
$ip = $_SERVER['REMOTE_ADDR'];
}
return $ip;
}
$real_ip = getRealUserIp();
echo $real_ip;
請(qǐng)注意,HTTP_X_FORWARDED_FOR
可能包含一個(gè) IP 地址列表,因此我們使用 explode()
函數(shù)將其拆分為數(shù)組,并取第一個(gè)元素作為用戶的真實(shí) IP 地址。這通常是最可靠的,因?yàn)榈谝粋€(gè) IP 地址通常是用戶的真實(shí) IP 地址,而后續(xù)的 IP 地址可能是代理服務(wù)器的 IP 地址。