這裏有壹個函數:
//定義壹個函數getIP()
函數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("遠程_ADDR "))
$ip = getenv("遠程_ ADDR ");else $ ip = " Unknow
返回$ ip}
//如何使用:
echo getIP();?& gt
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("遠程_ADDR "))
這兩行語句得到的客戶端的IP地址也是真實的IP地址。