首頁 >後端開發 >php教程 >PHP如何準確判斷客戶端IP位址?

PHP如何準確判斷客戶端IP位址?

Patricia Arquette
Patricia Arquette原創
2024-12-17 05:33:25739瀏覽

How Can I Accurately Determine a Client's IP Address in PHP?

在PHP 中確定客戶端的IP 位址

PHP 超全域數組$_SERVER 提供對各種伺服器相關資訊的訪問,包括客戶端的遠端資訊透過$_SERVER['REMOTE_ADDR'] 的IP 位址。但這種方法在特定場景下可能會存在不足。

如果 $_SERVER['REMOTE_ADDR'] 值不正確,可以使用替代伺服器變數來準確取得 IP 位址。以下探討兩種方法:

使用 getenv() 函數:

getenv() 函數擷取環境變數的值。它可以用來取得客戶端的 IP 位址,如下所示:

function get_client_ip() {
    $ipaddress = '';
    if (getenv('HTTP_CLIENT_IP'))
        $ipaddress = getenv('HTTP_CLIENT_IP');
    else if(getenv('HTTP_X_FORWARDED_FOR'))
        $ipaddress = getenv('HTTP_X_FORWARDED_FOR');
    else if(getenv('HTTP_X_FORWARDED'))
        $ipaddress = getenv('HTTP_X_FORWARDED');
    else if(getenv('HTTP_FORWARDED_FOR'))
        $ipaddress = getenv('HTTP_FORWARDED_FOR');
    else if(getenv('HTTP_FORWARDED'))
       $ipaddress = getenv('HTTP_FORWARDED');
    else if(getenv('REMOTE_ADDR'))
        $ipaddress = getenv('REMOTE_ADDR');
    else
        $ipaddress = 'UNKNOWN';
    return $ipaddress;
}

使用 $_SERVER 超全域陣列:

$_SERVER 陣列包含 HTTP 請求資訊。以下程式碼示範了其在取得 IP 位址方面的用途:

function get_client_ip() {
    $ipaddress = '';
    if (isset($_SERVER['HTTP_CLIENT_IP']))
        $ipaddress = $_SERVER['HTTP_CLIENT_IP'];
    else if(isset($_SERVER['HTTP_X_FORWARDED_FOR']))
        $ipaddress = $_SERVER['HTTP_X_FORWARDED_FOR'];
    else if(isset($_SERVER['HTTP_X_FORWARDED']))
        $ipaddress = $_SERVER['HTTP_X_FORWARDED'];
    else if(isset($_SERVER['HTTP_FORWARDED_FOR']))
        $ipaddress = $_SERVER['HTTP_FORWARDED_FOR'];
    else if(isset($_SERVER['HTTP_FORWARDED']))
        $ipaddress = $_SERVER['HTTP_FORWARDED'];
    else if(isset($_SERVER['REMOTE_ADDR']))
        $ipaddress = $_SERVER['REMOTE_ADDR'];
    else
        $ipaddress = 'UNKNOWN';
    return $ipaddress;
}

兩種方法都提供相同的功能,但存取資訊的方式有所不同。

以上是PHP如何準確判斷客戶端IP位址?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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