1.REMOTE_ADDR:瀏覽目前頁面的使用者電腦的ip位址
2.HTTP_X_FORWARDED_FOR: 瀏覽目前頁面的使用者電腦的閘道
3.HTTP_CLIENT_IP:客戶端的ip關係客戶端的IP 位址,但如果客戶端是使用代理伺服器來訪問,那麼取到的就是代理伺服器的IP 位址,而不是真正的客戶端IP 位址。若想透過代理伺服器取得客戶端的真實 IP 位址,就要使用 $_SERVER["HTTP_X_FORWARDED_FOR"] 來讀取。
不過要注意的事,並不是每個代理伺服器都能用 $_SERVER["HTTP_X_FORWARDED_FOR"] 來讀取客戶端的真實 IP,有些用此方法讀取到的仍然是代理伺服器的 IP。
還有一點要注意的是:如果客戶端沒有透過代理伺服器來訪問,那麼用$_SERVER["HTTP_X_FORWARDED_FOR"] 取到的值將是空的。
/** * 获取客户端IP * @return string */ function get_client_ip() { $realip = ""; if ($_SERVER['HTTP_X_FORWARDED_FOR'] && preg_match('/^([0-9]{1,3}\.){3}[0-9]{1,3}$/', $_SERVER['HTTP_X_FORWARDED_FOR'])) { $realip = $_SERVER['HTTP_X_FORWARDED_FOR']; } else if ($_SERVER['HTTP_CLIENT_IP'] && preg_match('/^([0-9]{1,3}\.){3}[0-9]{1,3}$/', $_SERVER['HTTP_CLIENT_IP'])) { $realip = $_SERVER['HTTP_CLIENT_IP']; } else if($_SERVER['REMOTE_ADDR'] && preg_match('/^([0-9]{1,3}\.){3}[0-9]{1,3}$/', $_SERVER['HTTP_CLIENT_IP'])) { $realip = $_SERVER['REMOTE_ADDR']; } return $realip; }