萬盛學電腦網

 萬盛學電腦網 >> 網絡編程 >> php編程 >> php獲得用戶ip地址的比較不錯的方法

php獲得用戶ip地址的比較不錯的方法

 這篇文章主要介紹了php獲得用戶ip地址的方法,需要的朋友可以參考下

REMOTE_ADDR只能獲取訪問者本地連接中設置的IP,如某大學校園網中自己設置的10.X.XXX.XXX系列IP,而這個函數獲取的是局域網網關出口的IP地址,如果訪問者使用代理服務器,將不獲取代理服務器的IP,而是獲取訪問者網關的真實IP。如果將這個函數應用到限IP訪問的網頁中,別人即使通過限IP訪問段中的代理服務器,也不能訪問該頁面。    下面提供一個函數:  代碼如下: <?php    // 定義一個函數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") 取到的值將是空的。  復制代碼 代碼如下: 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值。    如果上面的else if(getenv("HTTP_X_FORWARDED_FOR"))取得的值為空(即沒有使用代理服務器),則不會執行下面的$ip = getenv("HTTP_X_FORWARDED_FOR");這一行語句。    這種情況下已經確認客戶端沒有使用代理服務器,從而通過  復制代碼 代碼如下: else if(getenv("REMOTE_ADDR"))  $ip = getenv("REMOTE_ADDR");    這兩行語句獲得客戶端的IP地址也是真實的IP地址。
copyright © 萬盛學電腦網 all rights reserved