PHP 獲取客戶端IP / URL操做

// 定義一個函數getIP()
function getIP()
{
global $ip;
if (getenv("HTTP_CLIENT_IP"))
$ip = getenv("HTTP_CLIENT_IP");
else if(getenv("HTTP_X_FORWARDED_FOR"))
$ip = getenv("HTTP_X_FORWARDED_FOR");
else if(getenv("REMOTE_ADDR"))
$ip = getenv("REMOTE_ADDR");
else $ip = "Unknow";
return $ip;
}
 
// 使用方法:
echo getIP();

getenv("REMOTE_ADDR")用來取得客戶端的 IP 地址,但若是客戶端是使用代理服務器來訪問,那取到的就是代理服務器的 IP 地址,而不是真正的客戶端 IP 地址。要想透過代理服務器取得客戶端的真實 IP 地址,就要使用 getenv("HTTP_X_FORWARDED_FOR") 來讀取。
可是若是客戶端沒有經過代理服務器來訪問,那麼用getenv("HTTP_X_FORWARDED_FOR") 取到的值將是空的。php

else if(getenv("HTTP_X_FORWARDED_FOR"))
$ip = getenv("HTTP_X_FORWARDED_FOR");
表示若是getenv("HTTP_X_FORWARDED_FOR") 取到的值存在不爲空(即客戶端使用代理服務器的狀況下),則變量$ip等於getenv("HTTP_X_FORWARDED_FOR") 取到的真實IP值。html

若是上面的else if(getenv("HTTP_X_FORWARDED_FOR"))取得的值爲空(即沒有使用代理服務器),則不會執行下面的$ip = getenv("HTTP_X_FORWARDED_FOR");這一行語句。
這種狀況下已經確認客戶端沒有使用代理服務器,從而經過
else if(getenv("REMOTE_ADDR"))
$ip = getenv("REMOTE_ADDR");
這兩行語句得到客戶端的IP地址也是真實的IP地址服務器

    點  我  帶  你  飛 ! !函數

 

 

#測試網址:     http://localhost/blog/testurl.php?id=5測試

//獲取域名或主機地址 
echo $_SERVER['HTTP_HOST']."<br>"; #localhosturl

//獲取網頁地址 
echo $_SERVER['PHP_SELF']."<br>"; #/blog/testurl.php代理

//獲取網址參數 
echo $_SERVER["QUERY_STRING"]."<br>"; #id=5htm

//獲取用戶代理 
echo $_SERVER['HTTP_REFERER']."<br>"; blog

//獲取完整的url
echo 'http://'.$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'];
echo 'http://'.$_SERVER['HTTP_HOST'].$_SERVER['PHP_SELF'].'?'.$_SERVER['QUERY_STRING'];
#http://localhost/blog/testurl.php?id=5ip

//包含端口號的完整url
echo 'http://'.$_SERVER['SERVER_NAME'].':'.$_SERVER["SERVER_PORT"].$_SERVER["REQUEST_URI"]; 
#http://localhost:80/blog/testurl.php?id=5

//只取路徑
$url='http://'.$_SERVER['SERVER_NAME'].$_SERVER["REQUEST_URI"]; 
echo dirname($url);
#http://localhost/blog

 

    點  我  帶  你  飛 ! !

相關文章
相關標籤/搜索