獲取用戶的ip
<php?
function real_ip(){
static $realip = NULL;
if ($realip !== NULL){
return $realip;
}
if (isset($_SERVER)){
if (isset($_SERVER['HTTP_X_FORWARDED_FOR'])){ //但如果客戶端是使用代理服務器來訪問,那取到的就是代理服務器的 IP 地址,而不是真正的客戶端 IP 地址。要想透過代理服務器取得客戶端的真實 IP 地址,就要使用 $_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'])){//HTTP_CLIENT_IP 是代理服務器發送的HTTP頭。如果是"超級匿名代理",則返回none值。同樣,REMOTE_ADDR也會被替換為這個代理服務器的IP。
$realip = $_SERVER['HTTP_CLIENT_IP'];
}else{
if (isset($_SERVER['REMOTE_ADDR'])){ //正在瀏覽當前頁面用戶的 IP 地址
$realip = $_SERVER['REMOTE_ADDR'];
}else{
$realip = '0.0.0.0';
}
}
}else{
//getenv環境變量的值
if (getenv('HTTP_X_FORWARDED_FOR')){//但如果客戶端是使用代理服務器來訪問,那取到的就是代理服務器的 IP 地址,而不是真正的客戶端 IP 地址。要想透過代理服務器取得客戶端的真實 IP 地址
$realip = getenv('HTTP_X_FORWARDED_FOR');
}elseif (getenv('HTTP_CLIENT_IP')){ //獲取客戶端IP
$realip = getenv('HTTP_CLIENT_IP');
}else{
$realip = getenv('REMOTE_ADDR'); //正在瀏覽當前頁面用戶的 IP 地址
}
}
preg_match("/[\d\.]{7,15}/", $realip, $onlineip);
$realip = !empty($onlineip[0]) ? $onlineip[0] : '0.0.0.0';
return $realip;
}
$ip= real_ip();
?>