一、如果沒(méi)有使用代理服務(wù)器,
REMOTE_ADDR = 客戶(hù)端IP HTTP_X_FORWARDED_FOR = 沒(méi)數(shù)值或不顯示
$ip = $_SERVER['REMOTE_ADDR'];
二、使用透明代理,
REMOTE_ADDR = 最后一個(gè)代理服務(wù)器 IP
HTTP_X_FORWARDED_FOR = 客戶(hù)端真實(shí) IP (經(jīng)過(guò)多個(gè)代理服務(wù)器時(shí),這個(gè)值類(lèi)似:221.5.252.160, 203.98.182.163, 203.129.72.215)
這類(lèi)代理還會(huì)將客戶(hù)真實(shí)ip發(fā)送到請(qǐng)求對(duì)象,無(wú)法隱藏真實(shí)ip。
$ip = $_SERVER['HTTP_X_FORWARDED_FOR'];
三、使用普通匿名代理服務(wù)器,
REMOTE_ADDR = 最后一個(gè)代理服務(wù)器 IP
HTTP_X_FORWARDED_FOR = 代理服務(wù)器 IP (經(jīng)過(guò)多個(gè)代理服務(wù)器時(shí),這個(gè)值類(lèi)似:203.98.182.163, 203.98.182.163, 203.129.72.215)
這樣就隱藏了客戶(hù)端的真實(shí)ip,但服務(wù)器會(huì)知道客戶(hù)端是通過(guò)代理服務(wù)器去訪問(wèn)的。
四、使用欺騙性代理服務(wù)器,
REMOTE_ADDR = 代理服務(wù)器 IP
HTTP_X_FORWARDED_FOR = 隨機(jī)的 IP(經(jīng)過(guò)多個(gè)代理服務(wù)器時(shí),這個(gè)值類(lèi)似:220.4.251.159, 203.98.182.163, 203.129.72.215)
服務(wù)器可以識(shí)別到時(shí)通過(guò)代理服務(wù)器訪問(wèn)的,但發(fā)送給目標(biāo)服務(wù)器的是虛假ip。
五、使用高匿名代理,
REMOTE_ADDR = 代理服務(wù)器 IP HTTP_X_FORWARDED_FOR = 沒(méi)數(shù)值或不顯示
使用這種代理時(shí),不同瀏覽器不同設(shè)備會(huì)返回不同的ip頭信息,因此PHP使用$_SERVER["REMOTE_ADDR"] 、$_SERVER["HTTP_X_FORWARDED_FOR"] 獲取的值可能是空值也可能是“unknown”值。
PHP獲取ip代碼如下:
public function ip() { //strcasecmp 比較兩個(gè)字符,不區(qū)分大小寫(xiě)。返回0,>0,<0。
if(getenv('HTTP_CLIENT_IP') && strcasecmp(getenv('HTTP_CLIENT_IP'), 'unknown')) { $ip = getenv('HTTP_CLIENT_IP'); } elseif(getenv('HTTP_X_FORWARDED_FOR') && strcasecmp(getenv('HTTP_X_FORWARDED_FOR'), 'unknown')) { $ip = getenv('HTTP_X_FORWARDED_FOR'); } elseif(getenv('REMOTE_ADDR') && strcasecmp(getenv('REMOTE_ADDR'), 'unknown')) { $ip = getenv('REMOTE_ADDR'); } elseif(isset($_SERVER['REMOTE_ADDR']) && $_SERVER['REMOTE_ADDR'] && strcasecmp($_SERVER['REMOTE_ADDR'], 'unknown')) { $ip = $_SERVER['REMOTE_ADDR']; } $res = preg_match ( '/[\d\.]{7,15}/', $ip, $matches ) ? $matches [0] : ''; echo $res; //dump(phpinfo());//所有PHP配置信息}