12
18

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

CakePHPでグローバルIPを取得する

Last updated at Posted at 2014-11-26

つい最近、CakePHPを使用して、グローバルIPを取得する処理を組みましたが、
ちょっとはまってしまったので書いていきます

##・普通に取得する場合

public function get_global_ip(){
	return $this->request->clientIP();
}

普通にCakePHPでIPアドレスを取得する場合はこれで大丈夫です
ただ、LoadBarancerやリバースプロキシを使用している場合はこれでは、
内部での通信に利用されているプライベートIPが取得され、
グローバルIPが取得できませんでした

##・ではどのように?
方法としては、

public function get_global_ip(){
	return $_SERVER['HTTP_X_FORWARDED_FOR'];
}

でアクセス元のグローバルIPを取得することが出来ます
※参考はこちら:http://httpd.apache.org/docs/2.2/mod/mod_proxy.html#x-headers

CakePHPでは、上記の$_SERVER変数を使用しなくても下記のように取得することが出来ます

public function get_global_ip(){
	return $this->request->clientIp(false);
}

そう、falseを引数に渡してあげるだけなんです!!
なぜそれをデフォルトでしてくれないのか。。。(´・ω・`)

※追記
ご指摘をいただいたのですが、今回はIPアドレスから地域情報を取得する機能を実装していたため、
IPアドレスの偽装は考慮しておりません。

12
18
3

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
12
18

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?