PHPの$_SERVER["REMOTE_ADDR"]でIPアドレスが正常に取得できない場合
2022/09/16
とある環境で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();
参考サイト
関連記事
-
-
MySQLでランダムにデータを取得しつつページング機能も実装する方法
MySQLからデータを持ってくる際にランダムな表示を行ってほしいと言われた。ただ ...
-
-
PHPで配列をGETパラメータ化、GETパラメータを配列化する方法
PHPで配列を「name=hoge&id=1&pass=fdkn ...
-
-
CodeIgniter4.4.4のインストールからHello Worldページ表示まで行う方法
以前CodeIgniter3を勉強したことがあったが新バージョンの4系がリリース ...
-
-
PHPでパーミッションの変更
chmodというみたことが無いPHP関数があったのでメモ。 ■参考サイト htt ...
-
-
PHPの構文チェック
JSONLINTみたいにオンラインで構文チェックを できるサイト様があったのでメ ...