php獲得用戶ip地址的比較不錯(cuò)的方法
REMOTE_ADDR只能獲取訪問(wèn)者本地連接中設(shè)置的IP,如某大學(xué)校園網(wǎng)中自己設(shè)置的10.X.XXX.XXX系列IP,而這個(gè)函數(shù)獲取的是局域網(wǎng)網(wǎng)關(guān)出口的IP地址,如果訪問(wèn)者使用代理服務(wù)器,將不獲取代理服務(wù)器的IP,而是獲取訪問(wèn)者網(wǎng)關(guān)的真實(shí)IP。如果將這個(gè)函數(shù)應(yīng)用到限IP訪問(wèn)的網(wǎng)頁(yè)中,別人即使通過(guò)限IP訪問(wèn)段中的代理服務(wù)器,也不能訪問(wèn)該頁(yè)面。
下面提供一個(gè)函數(shù):
<?php
// 定義一個(gè)函數(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")用來(lái)取得客戶端的 IP 地址,但如果客戶端是使用代理服務(wù)器來(lái)訪問(wèn),那取到的就是代理服務(wù)器的 IP 地址,而不是真正的客戶端 IP 地址。要想透過(guò)代理服務(wù)器取得客戶端的真實(shí) IP 地址,就要使用 getenv("HTTP_X_FORWARDED_FOR") 來(lái)讀取。
但是如果客戶端沒(méi)有通過(guò)代理服務(wù)器來(lái)訪問(wèn),那么用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") 取到的真實(shí)IP值。
如果上面的else if(getenv("HTTP_X_FORWARDED_FOR"))取得的值為空(即沒(méi)有使用代理服務(wù)器),則不會(huì)執(zhí)行下面的$ip = getenv("HTTP_X_FORWARDED_FOR");這一行語(yǔ)句。
這種情況下已經(jīng)確認(rèn)客戶端沒(méi)有使用代理服務(wù)器,從而通過(guò)
else if(getenv("REMOTE_ADDR"))
$ip = getenv("REMOTE_ADDR");
這兩行語(yǔ)句獲得客戶端的IP地址也是真實(shí)的IP地址。
- PHP獲取用戶訪問(wèn)IP地址的5種方法
- php獲取本機(jī)真實(shí)IP地址實(shí)例代碼
- php驗(yàn)證郵箱和ip地址最簡(jiǎn)單方法匯總
- PHP 獲取客戶端真實(shí)IP地址多種方法小結(jié)
- PHP準(zhǔn)確取得服務(wù)器IP地址的方法
- PHP中根據(jù)IP地址判斷城市實(shí)現(xiàn)城市切換或跳轉(zhuǎn)代碼
- php實(shí)現(xiàn)獲取局域網(wǎng)所有用戶的電腦IP和主機(jī)名、及mac地址完整實(shí)例
- php實(shí)現(xiàn)根據(jù)IP地址獲取其所在省市的方法
- php中獲取主機(jī)名、協(xié)議及IP地址的方法
- php判斷IP地址是否在多個(gè)IP段內(nèi)
相關(guān)文章
php實(shí)現(xiàn)singleton()單例模式實(shí)例
這篇文章主要介紹了php實(shí)現(xiàn)singleton()單例模式的方法,以實(shí)例形式簡(jiǎn)單講述了單例模式的實(shí)現(xiàn)過(guò)程,需要的朋友可以參考下2014-11-11PHP var關(guān)鍵字相關(guān)原理及使用實(shí)例解析
這篇文章主要介紹了PHP var關(guān)鍵字相關(guān)原理及使用實(shí)例解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-07-07PHP樹(shù)形結(jié)構(gòu)tree類(lèi)用法示例
這篇文章主要介紹了PHP樹(shù)形結(jié)構(gòu)tree類(lèi)用法,結(jié)合實(shí)例形式分析了php無(wú)限分類(lèi)樹(shù)tree.class.php的定義及使用相關(guān)操作技巧,需要的朋友可以參考下2019-02-02PHP關(guān)于foreach復(fù)制知識(shí)點(diǎn)總結(jié)
在本篇文章里小編給大家分享了關(guān)于PHP關(guān)于foreach復(fù)制知識(shí)點(diǎn)總結(jié),有興趣的朋友們學(xué)習(xí)下。2019-01-01php網(wǎng)頁(yè)后退不再出現(xiàn)過(guò)期
php網(wǎng)頁(yè)后退不再出現(xiàn)過(guò)期...2007-03-03PHP隨機(jī)數(shù)函數(shù)rand()與mt_rand()的講解
今天小編就為大家分享一篇關(guān)于PHP隨機(jī)數(shù)函數(shù)rand()與mt_rand()的講解,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧2019-03-03