ホームページ >バックエンド開発 >PHPチュートリアル >PHP でクライアントの IP アドレスを確実に取得する方法

PHP でクライアントの IP アドレスを確実に取得する方法

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-12-06 14:10:16988ブラウズ

How to Reliably Retrieve a Client's IP Address in PHP?

PHP でクライアントの IP アドレスを取得する

PHP の $_SERVER スーパーグローバルは、Web サイト訪問者の IP アドレスを取得するメソッドを提供します。ただし、従来の $_SERVER['REMOTE_ADDR'] アプローチを使用すると、間違った IP アドレスが返される可能性があります。この不一致は、プロキシ サーバーやロード バランサーなどの複数の要因に起因する可能性があります。

正確な IP アドレスを取得するには、代替サーバー変数を検討してください。次の 2 つの関数は交換可能であり、その方法を示しています。

getenv() の使用:

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 の使用:

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

これらの関数は、サーバーで使用可能な最も信頼性の高い IP アドレス オプションを優先します。変数を使用して、クライアントの IP アドレスを正確に表現します。

以上がPHP でクライアントの IP アドレスを確実に取得する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。