首頁  >  文章  >  後端開發  >  PHP取得客戶端的IP

PHP取得客戶端的IP

高洛峰
高洛峰原創
2016-10-20 13:55:54845瀏覽

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;
}

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
上一篇:php 優化下一篇:php 優化