這個是最簡單的方法,對於開了透明代理之類的是沒有辦法的,如果內網訪問也不能讀取正確的外網IP,不過很省力就是了:
代碼如下 |
複製代碼 |
$ip = $_SERVER["REMOTE_ADDR"]; |
搞定~
上面方法用來取得用戶端的 IP 位址,但如果用戶端是使用Proxy 伺服器來訪問,那取到的就是Proxy 伺服器的 IP 位址,而不是真正的用戶端 IP 位址
要想透過Proxy 伺服器取得用戶端的真實 IP 位址,就要使用 getenv("HTTP_X_FORWARDED_FOR") 來讀取。
但是如果用戶端沒有通過Proxy 伺服器來訪問,那麼用getenv("HTTP_X_FORWARDED_FOR") 取到的值將是空的。
代碼如下 |
複製代碼 |
else if(getenv("HTTP_X_FORWARDED_FOR")) $ip = getenv("HTTP_X_FORWARDED_FOR"); |
表示如果getenv("HTTP_X_FORWARDED_FOR") 取到的值存在不為空白(即用戶端使用Proxy 伺服器的情況下),則變數$ip等於getenv("HTTP_X_FORWARDED_FOR") 取到的真實IP值。
如果上面的else if(getenv("HTTP_X_FORWARDED_FOR"))取得的值為空白(即沒有使用Proxy 伺服器),則不會執行下面的$ip = getenv("HTTP_X_FORWARDED_FOR");這一行語句。
這種情況下已經確認用戶端沒有使用Proxy 伺服器,從而通過
代碼如下 |
複製代碼 |
else if(getenv("REMOTE_ADDR")) $ip = getenv("REMOTE_ADDR"); |
這兩行語句獲得用戶端的IP地址也是真實的IP地址,根據經驗得出
代碼如下 |
複製代碼 |
function getIP() { static $realip; if (isset($_SERVER)){ if (isset($_SERVER["HTTP_X_FORWARDED_FOR"])){ $realip = $_SERVER["HTTP_X_FORWARDED_FOR"]; } else if (isset($_SERVER["HTTP_CLIENT_IP"])) { $realip = $_SERVER["HTTP_CLIENT_IP"]; } else { $realip = $_SERVER["REMOTE_ADDR"]; } } else { if (getenv("HTTP_X_FORWARDED_FOR")){ $realip = getenv("HTTP_X_FORWARDED_FOR"); } else if (getenv("HTTP_CLIENT_IP")) { $realip = getenv("HTTP_CLIENT_IP"); } else { $realip = getenv("REMOTE_ADDR"); } www.111cn.net } return $realip; } |
另外如果我們想擷取更精準的使用第三方是一個不錯的方法哦
代碼如下 |
複製代碼 |
function get_onlineip() { $ch = curl_init('http://www.ip138.com/ip2city.asp'); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); $a = curl_exec($ch); preg_match('/[(.*)]/', $a, $ip); return $ip[1]; } |
這樣不管理代理程式還是什麼都可以判斷IP地址哦