獲取用戶(hù)的ip
<php?
function real_ip(){
static $realip = NULL;
if ($realip !== NULL){
return $realip;
}
if (isset($_SERVER)){
if (isset($_SERVER['HTTP_X_FORWARDED_FOR'])){ //但如果客戶(hù)端是使用代理服務(wù)器來(lái)訪問(wèn),那取到的就是代理服務(wù)器的 IP 地址,而不是真正的客戶(hù)端 IP 地址。要想透過(guò)代理服務(wù)器取得客戶(hù)端的真實(shí) IP 地址,就要使用 $_SERVER["HTTP_X_FORWARDED_FOR"] 來(lái)讀取。
$arr = explode(',', $_SERVER['HTTP_X_FORWARDED_FOR']);
/* 取X-Forwarded-For中第一個(gè)非unknown的有效IP字符串 */
foreach ($arr AS $ip){
$ip = trim($ip);
if ($ip != 'unknown'){
$realip = $ip;
break;
}
}
}elseif(isset($_SERVER['HTTP_CLIENT_IP'])){//HTTP_CLIENT_IP 是代理服務(wù)器發(fā)送的HTTP頭。如果是"超級(jí)匿名代理",則返回none值。同樣,REMOTE_ADDR也會(huì)被替換為這個(gè)代理服務(wù)器的IP。
$realip = $_SERVER['HTTP_CLIENT_IP'];
}else{
if (isset($_SERVER['REMOTE_ADDR'])){ //正在瀏覽當(dāng)前頁(yè)面用戶(hù)的 IP 地址
$realip = $_SERVER['REMOTE_ADDR'];
}else{
$realip = '0.0.0.0';
}
}
}else{
//getenv環(huán)境變量的值
if (getenv('HTTP_X_FORWARDED_FOR')){//但如果客戶(hù)端是使用代理服務(wù)器來(lái)訪問(wèn),那取到的就是代理服務(wù)器的 IP 地址,而不是真正的客戶(hù)端 IP 地址。要想透過(guò)代理服務(wù)器取得客戶(hù)端的真實(shí) IP 地址
$realip = getenv('HTTP_X_FORWARDED_FOR');
}elseif (getenv('HTTP_CLIENT_IP')){ //獲取客戶(hù)端IP
$realip = getenv('HTTP_CLIENT_IP');
}else{
$realip = getenv('REMOTE_ADDR'); //正在瀏覽當(dāng)前頁(yè)面用戶(hù)的 IP 地址
}
}
preg_match("/[\d\.]{7,15}/", $realip, $onlineip);
$realip = !empty($onlineip[0]) ? $onlineip[0] : '0.0.0.0';
return $realip;
}
$ip= real_ip();
?>