PHPでアクセス元のIPアドレスを取得する方法

こんにちは、さるまりんです。

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"]が存在しない場合などエラーが発生するのでエラーチェックは必要ですが、上記の方法で実際のアクセス元が取れるようになります。

関数化しておくと便利かな。

読んでくださってありがとうございました。

それではまた!