PHP获取客户端的真实IP
REMOTE_ADDR只能獲取訪問者本地連接中設(shè)置的IP,如中南民族大學(xué)校園網(wǎng)中自己設(shè)置的10.X.XXX.XXX系列IP,而這個函數(shù)獲取的是局域網(wǎng)網(wǎng)關(guān)出口的IP地址,
如果訪問者使用代理服務(wù)器,將不獲取代理服務(wù)器的IP,而是獲取訪問者網(wǎng)關(guān)的真實IP。如果將這個函數(shù)應(yīng)用到限IP訪問的網(wǎng)頁中,別人即使通過限IP訪問段中的代理服務(wù)器,也不能訪問該頁面。
| // 定義一個函數(shù)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 地址,但如果客戶端是使用代理服務(wù)器來訪問,那取到的就是代理服務(wù)器的 IP 地址,而不是真正的客戶端 IP 地址。要想透過代理服務(wù)器取得客戶端的真實 IP 地址,就要使用 getenv("HTTP_X_FORWARDED_FOR") 來讀取。
但是如果客戶端沒有通過代理服務(wù)器來訪問,那么用getenv("HTTP_X_FORWARDED_FOR") 取到的值將是空的。
else if(getenv("HTTP_X_FORWARDED_FOR"))
$ip = getenv("HTTP_X_FORWARDED_FOR");
表示如果getenv("HTTP_X_FORWARDED_FOR") 取到的值存在不為空(即客戶端使用代理服務(wù)器的情況下),則變量$ip等于getenv("HTTP_X_FORWARDED_FOR") 取到的真實IP值。
如果上面的else if(getenv("HTTP_X_FORWARDED_FOR"))取得的值為空(即沒有使用代理服務(wù)器),則不會執(zhí)行下面的$ip = getenv("HTTP_X_FORWARDED_FOR");這一行語句。
這種情況下已經(jīng)確認客戶端沒有使用代理服務(wù)器,從而通過
else if(getenv("REMOTE_ADDR"))
$ip = getenv("REMOTE_ADDR");
這兩行語句獲得客戶端的IP地址也是真實的IP地址。
轉(zhuǎn)載于:https://www.cnblogs.com/webu/archive/2013/01/31/2886895.html
總結(jié)
以上是生活随笔為你收集整理的PHP获取客户端的真实IP的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 菜鸟成长第一季
- 下一篇: StoryBoard学习..(很详细.)