|
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的問題
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手冊上有說明它是預定的變量;而HTTP_x_FORWARDED_FOR呢,在網上找了一些資料,是這么說的
在php 中使用 $_SERVER["REMOTE_ADDR"] 來取得客戶端的 IP 地址,但如果客戶端是使用代理服務器來訪問,那取到的就是代理服務器的 IP 地址,而不是真正的客戶端 IP 地址。要想透過代理服務器取得客戶端的真實 IP 地址,就要使用 $_SERVER["HTTP_X_FORWARDED_FOR"] 來讀取。
不過要注意的事,并不是每個代理服務器都能用 $_SERVER["HTTP_X_FORWARDED_FOR"] 來讀取客戶端的真實 IP,有些用此方法讀取到的仍然是代理服務器的 IP。
至于HTTP_CLIENT_IP,有篇貼子上說
'HTTP_CLIENT_IP'是用戶的IP,'HTTP_X_FORWARDED_FOR'是代理的IP
這些IP頭消息未必能夠取得到(因為不同的瀏覽器不同的網絡設備,可能發不同的IP頭消息).所以php就嘗試把每個IP頭消息判斷一下,若有,則取其中的一個.
php技術:php 獲取客戶端的真實ip,轉載需保留來源!
鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯系我們修改或刪除,多謝。