複製程式碼程式碼如下:
function GetIP(){
if (getenv("HTTP_CLIENT_IP") &get&enIP". "HTTP_CLIENT_IP"), "未知"))
$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'];
否則
$ip = "未知";
返回($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位址。
不過注意的事,不是每個代理伺服器都用 $_SERVER["HTTP_X_FORWARDED_FOR"] 來讀取客戶端的真實IP ,有些用這個方法讀取到的仍然是代理伺服器的IP。
'HTTP_CLIENT_IP'是使用者的IP,'HTTP_X_FORWARDED_FOR'是代理的IP
這些IP頭訊息不一定能夠到達(因為不同的瀏覽器不同的網路設備,可能會發不同的IP頭訊息)。所以PHP就嘗試著把每個IP頭訊息判斷一下,若有,則取其中的一個。
以上就介紹了php取得客戶端的真實ip,包含了方面的內容,希望對PHP教學有興趣的朋友有幫助。