勉強したことのメモ

Webエンジニア / プログラマが勉強したことのメモ。

PHPの$_SERVER["REMOTE_ADDR"]でIPアドレスが正常に取得できない場合

   2022/09/16  PHP

とある環境でPHPの$_SERVER["REMOTE_ADDR"]でIPアドレスを取得し表示しようとすると全然関係ないIPアドレスが表示された。他の環境だと正常に取得できるので環境に依存する問題のように思われる。また、恐らくだが当該環境ではリバースプロキシを用いているっぽい。以下に対応方法をメモ。

 

原因

リバースプロキシやロードバランサーを介して接続したクライアントのIPアドレスはREMOTE_ADDRでは取得できない模様。なのでX-Forwarded-Forを使用する。

 

対応方法

function getClientIpAddress() {
    if (array_key_exists('HTTP_X_FORWARDED_FOR', $_SERVER)) {
        $xForwardedFor = explode(",", $_SERVER['HTTP_X_FORWARDED_FOR']);
        if (!empty($xForwardedFor)) {
            return trim($xForwardedFor[0]);
        }
    }
    if (isset($_SERVER['REMOTE_ADDR'])) {
        return (string)$_SERVER['REMOTE_ADDR'];
    }
    return "";
}
$ip = getClientIpAddress();

 

参考サイト

https://www.gesource.jp/weblog/?p=8533

 - PHP

  関連記事

SendGridを使ってメールサーバを構築せずにPHPからメールを送信する方法
SendGridを使ってメールサーバを構築せずにPHPからメールを送信する方法

メールサーバを構築せずに独自ドメインのメールアドレスにてメール送信を行いたい。過 ...

PHPでのファイル関係
PHPでのファイル関係

ファイルを呼び出したり書き込んだりとかしばしば行うが、 未だに調べることが多いの ...

wp_mail関数でエンベロープFrom(Return-Path)が指定できない場合の対応方法
wp_mail関数でエンベロープFrom(Return-Path)が指定できない場合の対応方法

WordPress内に設置されたお問い合わせのフォームようなシステムでエンベロー ...

PHPでランダムなカラーコードを生成する「RandomColor.php」ライブラリの利用方法
PHPでランダムなカラーコードを生成する「RandomColor.php」ライブラリの利用方法

PHPでランダムなカラーコードを生成したい。自作するとなると「0~9」「a~f」 ...

Google Maps APIとPHPを組み合わせて複数マーカーとウィンドウを連携させる方法
Google Maps APIとPHPを組み合わせて複数マーカーとウィンドウを連携させる方法

やりたかった事は以下の通り。 mysqlから経度緯度、マーカー名、マーカーIDを ...