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();
参考サイト
関連記事
-
-
PHPでAPIを作成しJavaScript(jQuery無し)からリクエストする方法
管理画面等から何らかのデータをMySQLに登録し、そのデータをPHPで作成したA ...
-
-
Ajaxでデータを受信した際にリファラのチェックをしたい
Ajaxでデータを受信し、MySQLにINSERTするプログラムがあった。そこま ...
-
-
PHPでフォーム送信の際に禁止ワードのチェック及び制限をかける方法
掲示板等のformを送信する際に特定の禁止ワードが含まれていないかチェックするプ ...
-
-
PHPで一括出力ではなく、ひとつずつ順次に出力する方法
PHPで重たい処理とかをしている際に、途中報告みたいな形で順次出力させる方法のメ ...
-
-
htaccessではなくPHPでベーシック認証をかける方法
htaccessではなくPHPでベーシック認証をかける方法についてソースコードを ...