獲得客戶端ip的方法,排除代理伺服器

weixin_34391445發表於2017-03-24

在PHP 中使用 $_SERVER["REMOTE_ADDR"] 來取得客戶端的 IP地址,但如果客戶端是使用代理伺服器來訪問,那取到的就是代理伺服器的 IP 地址,而不是真正的客戶端 IP 地址。要想透過代理伺服器取得客戶端的真實 IP 地址,就要使用
$_SERVER["HTTP_X_FORWARDED_FOR"] 來讀取。

不過要注意的事,並不是每個代理伺服器都能用 $_SERVER["HTTP_X_FORWARDED_FOR"] 來讀取客戶端的真實IP,有些用此方法讀取到的仍然是代理伺服器的 IP。

還有一點需要注意的是:如果客戶端沒有通過代理伺服器來訪問,那麼用$_SERVER["HTTP_X_FORWARDED_FOR"]取到的值將是空的。因此,如果要在程式中使用此方法,可以這樣處理:

public static function getIP(){
    if ( !empty($_SERVER["HTTP_X_FORWARDED_FOR"]) ){
        return $_SERVER["HTTP_X_FORWARDED_FOR"];
    }
        return isset($_SERVER["REMOTE_ADDR"])?$_SERVER["REMOTE_ADDR"]:'';
    }

相關文章