カテゴリー
コンピューター

CakePHP2 の関数を使って IP アドレスを調べる方法を、メモ!

CakePHP2 の プレフィックスルーティングのページに、.htaccess の IP アドレスアクセス制限をかける方法! | oki2a24 では Apache の .htaccess を使う方法をメモしました。今度は、CakePHP2 に備わっている関数を使ってページを訪れた人の IP アドレスを取得する方法をメモします。

ポイント

  • コントローラーで、$this->request->clientIp(false)

<?php
class SampleController extends AppController {

        public function index() {
                $client_ip = $this->request->clientIp(false);
        }

}

これであとは $client_ip を判定してアクセスを制限するなどすれば、便利ですね。

ここで注意したいのは、RequestHandlerComponent::getClientIP(boolean $safe) は使いません。なぜなら、ソースを見ると使わないでくださいっ!とあったからです。

RequestHandlerComponent::getClientIP(boolean $safe)

使用すべきではありません。 use $this->request->clientIp() from your, controller instead.

Gets remote client IP

パラメーター:

boolean $safe
戻り値:
string Client IP address

ね?でしょう?

それに $this->request->clientIp() を使うほうが楽です。というのは、RequestHandlerComponent を使うためには、public $components でコンポーネントを読み込まなければなりませんが、$this->request->clientIp() だとこれを書く必要がないので一手間楽ができます。

また、$this->request->clientIp() に引数として false を渡したほうがよいように思います。関数の引数の説明に、こうあります。

@param boolean $safe Use safe = false when you think the user might manipulate their HTTP_CLIENT_IP header. Setting $safe = false will will also look at HTTP_X_FORWARDED_FOR

つまり、訪問者が HTTP_CLIENT_IP を操作しているとあなたが思うなら、$safe = false にすれば HTTP_X_FORWARDED_FOR も見るよ!と言っていますね。

以上です。

コメントを残す