|
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);
}
regist=off的問(wèn)題
if ($register_globals!=1) {
@extract($_SERVER, EXTR_SKIP);
@extract($_COOKIE, EXTR_SKIP);
@extract($_SESSION, EXTR_SKIP);
@extract($_POST, EXTR_SKIP);
@extract($_FILES, EXTR_SKIP);
@extract($_GET, EXTR_SKIP);
@extract($_ENV, EXTR_SKIP);
}
其中REMOTE_ADDR比較好理解,php手冊(cè)上有說(shuō)明它是預(yù)定的變量;而HTTP_x_FORWARDED_FOR呢,在網(wǎng)上找了一些資料,是這么說(shuō)的
在php 中使用 $_SERVER["REMOTE_ADDR"] 來(lái)取得客戶(hù)端的 IP 地址,但如果客戶(hù)端是使用代理服務(wù)器來(lái)訪(fǎng)問(wèn),那取到的就是代理服務(wù)器的 IP 地址,而不是真正的客戶(hù)端 IP 地址。要想透過(guò)代理服務(wù)器取得客戶(hù)端的真實(shí) IP 地址,就要使用 $_SERVER["HTTP_X_FORWARDED_FOR"] 來(lái)讀取。
不過(guò)要注意的事,并不是每個(gè)代理服務(wù)器都能用 $_SERVER["HTTP_X_FORWARDED_FOR"] 來(lái)讀取客戶(hù)端的真實(shí) IP,有些用此方法讀取到的仍然是代理服務(wù)器的 IP。
至于HTTP_CLIENT_IP,有篇貼子上說(shuō)
'HTTP_CLIENT_IP'是用戶(hù)的IP,'HTTP_X_FORWARDED_FOR'是代理的IP
這些IP頭消息未必能夠取得到(因?yàn)椴煌臑g覽器不同的網(wǎng)絡(luò)設(shè)備,可能發(fā)不同的IP頭消息).所以php就嘗試把每個(gè)IP頭消息判斷一下,若有,則取其中的一個(gè).
php技術(shù):php 獲取客戶(hù)端的真實(shí)ip,轉(zhuǎn)載需保留來(lái)源!
鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請(qǐng)第一時(shí)間聯(lián)系我們修改或刪除,多謝。