REMOTE_ADDR 是你的客戶端跟你的服務(wù)器“握手”時候的IP抒巢。如果使用了“匿名代理”麸粮,REMOTE_ADDR將顯示代理服務(wù)器的IP蛮放。
HTTP_CLIENT_IP 是代理服務(wù)器發(fā)送的HTTP頭拍皮。如果是“超級匿名代理”,則返回none值贿堰。同樣辙芍,REMOTE_ADDR也會被替換為這個代理服務(wù)器的IP。
$_SERVER[‘REMOTE_ADDR’]; //訪問端(有可能是用戶羹与,有可能是代理的)IP
$_SERVER[‘HTTP_CLIENT_IP’]; //代理端的(有可能存在故硅,可偽造)
$_SERVER[‘HTTP_X_FORWARDED_FOR’]; //用戶是在哪個IP使用的代理(有可能存在,也可以偽造)
簡單的getenv
function GetIP(){
if (getenv("HTTP_CLIENT_IP") && strcasecmp(getenv("HTTP_CLIENT_IP"), "unknown"))
$ip = getenv("HTTP_CLIENT_IP");
else if (getenv("HTTP_X_FORWARDED_FOR") && strcasecmp(getenv("HTTP_X_FORWARDED_FOR"), "unknown"))
$ip = getenv("HTTP_X_FORWARDED_FOR");
else if (getenv("REMOTE_ADDR") && strcasecmp(getenv("REMOTE_ADDR"), "unknown"))
$ip = getenv("REMOTE_ADDR");
else if (isset($_SERVER['REMOTE_ADDR']) && $_SERVER['REMOTE_ADDR'] && strcasecmp($_SERVER['REMOTE_ADDR'], "unknown"))
$ip = $_SERVER['REMOTE_ADDR'];
else
$ip = "unknown";
return($ip);
}
$_SERVER
// 獲取IP地址
function getIp(){
$ip='未知IP';
if(!empty($_SERVER['HTTP_CLIENT_IP'])){
return is_ip($_SERVER['HTTP_CLIENT_IP'])?$_SERVER['HTTP_CLIENT_IP']:$ip;
}elseif(!empty($_SERVER['HTTP_X_FORWARDED_FOR'])){
return is_ip($_SERVER['HTTP_X_FORWARDED_FOR'])?$_SERVER['HTTP_X_FORWARDED_FOR']:$ip;
}else{
return is_ip($_SERVER['REMOTE_ADDR'])?$_SERVER['REMOTE_ADDR']:$ip;
}
}
function is_ip($str){
$ip=explode('.',$str);
for($i=0;$i<count($ip);$i++){
if($ip[$i]>255){
return false;
}
}
return preg_match('/^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$/',$str);
}
參考:http://www.cnblogs.com/lmule/archive/2010/10/15/1852020.html