
/** |
* 获得用户的真实 IP 地址 |
* |
* @return NULL Ambigous unknown> |
*/ |
function get_client_ip(){ |
static $realip = NULL; |
if($realip !== NULL){ |
return $realip; |
} |
if(isset($_SERVER)){ |
if(isset($_SERVER['HTTP_X_FORWARDED_FOR'])){ |
$arr = explode(',',$_SERVER['HTTP_X_FORWARDED_FOR']); |
/* 取X-Forwarded-For中第?个非unknown的有效IP字符? */ |
foreach($arr as $ip){ |
$ip = trim($ip); |
if($ip != 'unknown'){ |
$realip = $ip; |
break; |
} |
} |
}elseif(isset($_SERVER['HTTP_CLIENT_IP'])){ |
$realip = $_SERVER['HTTP_CLIENT_IP']; |
}else{ |
if(isset($_SERVER['REMOTE_ADDR'])){ |
$realip = $_SERVER['REMOTE_ADDR']; |
}else{ |
$realip = '0.0.0.0'; |
} |
} |
}else{ |
if(getenv('HTTP_X_FORWARDED_FOR')){ |
$realip = getenv('HTTP_X_FORWARDED_FOR'); |
}elseif(getenv('HTTP_CLIENT_IP')){ |
$realip = getenv('HTTP_CLIENT_IP'); |
}else{ |
$realip = getenv('REMOTE_ADDR'); |
} |
} |
preg_match("/[\d\.]{7,15}/",$realip,$onlineip); |
$realip = !empty($onlineip[0]) ? $onlineip[0] : '0.0.0.0'; |
return $realip; |
} |



