[自分用メモ] CakePHPでホストアドレスを確認して挙動を変更したい

CakePHPならずとも、サーバのホストアドレスの取得方法はPHPのグローバル変数を使えば取得することは可能だ。私がやりたかったことは、同じコードを使ってホストアドレス別に表示や動作を切り替えるという方法だ。本来であれば開発コードと製品コードはSubversionやGitなどを使ってそれぞれ分離し、開発コードで問題がないことを確認したら製品コードにブランチするなどし、サーバも別々に設定して(といってもバーチャルホストでいいと思うけれど)、運用中のコードを使って開発するなどということはないようにするのが大前提であろう。しかしそうでなくてもよい場合、同じコードでありながらどのバーチャルホストで動作中であるかを把握し、それぞれで処理を区分したいという実装が必要になる。

そう大層な話ではないが、$_SERVER[“HTTP_HOST”]などでリクエストホストの名前を取得することは容易である。CakePHPの場合は、$_SERVERや$_ENVを取り出す関数としてenv()が用意されているため、これを使うほうが望ましいかもしれない。
ホスト名はFQDNであるため、ドットで区切った一番最初のサブドメインパートを抜き出して、これで判断するという方法である。
ここでは、開発用URLに「www-dev.example.jp」、製品用URLに「www-prod.example.jp」という名前を付けることにする。httpd.confなどの設定は<virtualhost>を適宜行う必要がある。

記述場所はどこでもよいが、どこでも使用したい場合にはAppController.phpのbeforeFilter()あたりに書くのがよいだろう。

1行目ではホスト名をドットで分解し、そのうちの先頭のサブドメイン部だけを$subdomに抜き出す。
2行目はさらにハイフンで分解し、「www」部分と「dev」もしくは「prod」部分に切り出す。
3~9行目で判断となる。この場合、AppControllerクラスにpublic $mode;もしくはprotected $mode;のように継承したクラスでも参照できるメンバ変数を用意して参照できるようにすればいいだろう。

コメントを残す

メールアドレスが公開されることはありません。

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください