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 も見るよ!と言っていますね。
以上です。