問題是,我無法在某些共享主機或VPS上獲取訪問者IP。PHP:在共享主機和某些VPS上無法獲得訪問者IP
這裏是我的「強大」的功能:
function get_IP(){
$findIP=array(
'HTTP_CLIENT_IP',
'HTTP_X_FORWARDED_FOR',
'HTTP_X_FORWARDED',
'HTTP_X_CLUSTER_CLIENT_IP',
'HTTP_FORWARDED_FOR',
'HTTP_FORWARDED',
'REMOTE_ADDR'
);
$blacklistIP=array(
'127.0.0.1',
'255.255.255.255',
);
$ip = '';
foreach($findIP as $http)
{
if(function_exists("getenv"))
{
$ip = getenv($http);
}
else
{
if (array_key_exists($http, $_SERVER) !== false){
foreach (explode(',', $_SERVER[$http]) as $findIP){
$ip = trim($findIP);
}
}
}
if(function_exists("filter_var") && !empty($ip) && in_array($ip, $blacklistIP)===false)
{
if (filter_var($ip, FILTER_VALIDATE_IP, FILTER_FLAG_NO_PRIV_RANGE | FILTER_FLAG_NO_RES_RANGE) !== false) return $ip;
}
else if(preg_match('/^(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$/', $ip) && !empty($ip) && in_array($ip, $blacklistIP)===false)
{
return $ip;
}
}
return '0.0.0.0';
}
此功能工作完全正常的服務器,但一些共享和VPS讓我有很多問題。
某些服務器返回我127.0.0.1
和一些服務器上HTTP_CLIENT_IP
,HTTP_X_FORWARDED_FOR
,HTTP_X_FORWARDED
,HTTP_X_CLUSTER_CLIENT_IP
,HTTP_FORWARDED_FOR
,HTTP_FORWARDED
和REMOTE_ADDR
回報像空或沒有設置。
我的錯誤在哪裏?錯過了什麼或我能做什麼?謝謝!
這些服務器是否使用反向代理將流量分散到不同的主機? – TZHX
我真的不知道。我可以檢查。這是我客戶的服務器。 –
@TZHX可能已經擊中了頭部。您很可能會獲取代理服務器的IP地址,而不是客戶端的IP地址。 – Kryten