1. ホーム
  2. php

[解決済み】PHPでクライアントIPアドレスを取得する【重複あり

2022-04-07 14:45:32

質問

自分のホームページを利用しているクライアントのIPアドレスを取得したい。私は、PHPの $_SERVER スーパーグローバル

$_SERVER['REMOTE_ADDR'];

しかし、この方法では正しいIPアドレスを与えることができないようです。私は自分のIPアドレスを取得し、それが私のIPアドレスとは異なることを確認し、私はまた、いくつかのWebサイトのように私のIPアドレスを見ることができます。

http://whatismyipaddress.com/

PHPの関数に与えるIPアドレスを貼り付けるのですが、このウェブサイトではこれに関する結果が表示されません。この問題はどのように発生し、どのようにクライアントのIPアドレスを取得できるのでしょうか?

解決方法を教えてください。

最も簡単な方法は、訪問者/クライアントの IPアドレス を使用することです。 $_SERVER['REMOTE_ADDR'] または $_SERVER['REMOTE_HOST'] 変数を使用します。

しかし、これでは訪問者の正しいIPアドレスを返せないことがあるので、他のサーバー変数を使用してIPアドレスを取得することができます。

以下の2つの関数は、値の取得方法と取得先が異なるだけで、同じものです。

getenv() は、PHP の環境変数の値を取得するために使用します。

// Function to get the client IP address
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 to get the client IP address
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;
}