こんにちは、さるまりんです。
PHPでアクセス元のIPアドレスを取得するには定義済みの変数$_SERVER
を利用して次のように取得します。
$_SERVER["REMOTE_ADDR"]
これで間違い無いのですが、AWSでELBを利用している時にその内側で上記のコードを使うとELBのIPアドレスを取得してきてしまいます。
では、どうするか?
$_SERVER["HTTP_X_FORWARDED_FOR"]
これで取得できます。
が、注意が必要です。上記のコードでは複数のIPアドレスがカンマ区切りで入っているので、その一番最初の値をオリジナルのアクセス元IPとして取る必要があります。
コードにするとこんな感じです。
$forwardedFor = $_SERVER["HTTP_X_FORWARDED_FOR"];
$ips = explode(",", $forwardedFor);
$ip = $ips[0];
もちろん$_SERVER["HTTP_X_FORWARDED_FOR"]
が存在しない場合などエラーが発生するのでエラーチェックは必要ですが、上記の方法で実際のアクセス元が取れるようになります。
関数化しておくと便利かな。
読んでくださってありがとうございました。
それではまた!