php獲取客戶端ip的情況分為:沒有使用**伺服器的情況、使用透明**伺服器的情況、使用普通匿名**伺服器的情況、使用欺騙性**伺服器的情況、使用高匿名**伺服器的情況。
在這篇文章中,我們將會為大家詳細介紹php獲取客戶端ip的幾種情況分析。我們在使用php獲取的ip可能是客戶端真實的ip,也可能是**伺服器的ip,也有可能根本取不到任何ip值。
經驗分享 總結php常用函式
一勞永逸 打造簡單php分頁函式
方便快捷的php長文章分頁函式
**php分頁導航函式的具體應用
為你解讀php realpath路徑函式
在php獲取客戶端ip中常使用 $_server["remote_addr"] 。但如果客戶端是使用**伺服器來訪問,那取到的是**伺服器的 ip 位址,而不是真正的客戶端 ip 位址。要想透過**伺服器取得客戶端的真實 ip 位址,就要使用 $_server["http_x_forwarded_for"] 來讀取。
但只有客戶端使用「透明**」的情況下,$_server["http_x_forwarded_for"] 的值才是客戶端真正的ip(如果是多層**,該值可能是由客戶端真正ip和多個**伺服器的ip組成,由逗號「,」分隔),而在「匿名**」、「欺騙性**」的情況下是**伺服器的ip值(如果是多層**,該值可能由多個**伺服器的ip組成,由逗號「,」分隔),在「高匿名**」的情況下是空值。
關於http頭資訊中的remote_addr、http_forwarded_for值,我們在下文中有詳細的介紹,假設客戶端真實ip是221.5.252.160:
一、沒有使用**伺服器的php獲取客戶端ip情況:
remote_addr = 客戶端ip
http_x_forwarded_for = 沒數值或不顯示
二、使用透明**伺服器的情況:transparent proxies
remote_addr = 最後乙個**伺服器 ip
http_x_forwarded_for = 客戶端真實 ip (經過多個**伺服器時,這個值類似:221.5.252.160, 203.98.182.163, 203.129.72.215)
這類**伺服器還是將客戶端真實的ip傳送給了訪問物件,無法達到隱藏真實身份的目的。
三、使用普通匿名**伺服器的php獲取客戶端ip情況:anonymous proxies
remote_addr = 最後乙個**伺服器 ip
http_x_forwarded_for = **伺服器 ip (經過多個**伺服器時,這個值類似:203.98.182.163, 203.98.182.163, 203.129.72.215)
這種情況下隱藏了客戶端的真實ip,但是向訪問物件透露了客戶端是使用**伺服器訪問它們的。
四、使用欺騙性**伺服器的情況:distorting proxies
remote_addr = **伺服器 ip
http_x_forwarded_for = 隨機的 ip(經過多個**伺服器時,這個值類似:220.4.251.159, 203.98.182.163, 203.129.72.215)
這種情況下同樣透露了客戶端是使用了**伺服器,但編造了乙個虛假的隨機ip(220.4.251.159)代替客戶端的真實ip來欺騙它。
五、使用高匿名**伺服器的php獲取客戶端ip情況:high anonymity proxies (elite proxies)
remote_addr = **伺服器 ip
http_x_forwarded_for = 沒數值或不顯示
無論是remote_addr還是http_forwarded_for,這些頭訊息未必能夠取得到,因為不同的瀏覽器不同的網路裝置可能傳送不同的ip頭訊息。因此php使用$_server["remote_addr"] 、$_server["http_x_forwarded_for"] 獲取的值可能是空值也可能是「unknown」值。
因此,使用php獲取客戶端ip的**可以如下:
function getip() elseif ( isset($_server['remote_addr']) && $_server['remote_addr'] && strcasecmp($_server['remote_addr'], $unknown) ) /* 處理多層**的情況 或者使用正則方式:$ip = preg_match("/[/d/.]/", $ip, $matches) ? $matches[0] : $unknown; */ if (false !== strpos($ip, ',')) $ip = reset(explode(',', $ip)); return $ip; }
php獲取客戶端ip時另外一點需注意,使用函式getenv(』http_x_forwarded_for』)或getenv(』remote_addr』) 也可以如上**一樣取得同樣的效果。但getenv()不支援在iis的isapi方式下執行的php。
深入分析幾種PHP獲取客戶端IP的情況
在這篇文章中,我們將會為大家詳細介紹php獲取客戶端ip的幾種情況分析。我們在使用php獲取的ip可能是客戶端真實的ip,也可能是 伺服器的ip,也有可能根本取不到任何ip值。在php獲取客戶端ip中常使用 server remote addr 但如果客戶端是使用 伺服器來訪問,那取到的是 伺服器的...
深入分析幾種PHP獲取客戶端IP的情況轉
轉 function getip elseif isset server remote addr server remote addr strcasecmp server remote addr unknown 處理多層 的情況 或者使用正則方式 ip preg match d ip,matches...
分析php獲取客戶端ip
用php能獲取客戶端ip,這個大家都知道,如下 獲取客戶端ip ip位址合法驗證 long sprintf u ip2long ip ip long array ip,long array 0.0.0.0 0 return ip type 雖然這個非常非常的簡單,但是php本就是伺服器端語言,為什麼...