世間一般に言われる「ゴールデンウィーク」も今日が最終日ですが、皆様いかがお過ごしでしょうか。
ちなみに、私はずっと開発に集中していました。
さて、今回はCakePHP3で.envファイルを利用する方法についてここに記載しておきます。
Laravelではプロジェクトルートに「.env」ファイルを配置し、その中に設定した値を利用して環境ごとの差異を吸収するという手法が取られています(このファイルはバージョン管理外とします)。
Javaを長くやってきた私は、アプリケーションサーバに設定する手法を主に使ってきたので、PHPのWebアプリで使う環境変数はすべてApacheに設定していました。
ただ、最近Webサーバをnginxに変えた際、環境変数の設定に手こずり、あげく「ほんとにこれで良いのか?」となっていました。
アプリ単位で管理するのならそれが良いのかなと今では思っていますので、同様のことをCakePHP3でも実施したというのが今回の対応です。
CakePHP3.5から、dotenvの機能が標準搭載されています。
以下に記載したやり方と異なりますが、今後を考えるとそちらに倣っていただいたほうが良いです。
詳しくはこちらをご覧ください。
ファイルの配置
まずはプロジェクトルートに「.env」を配置します。
今回はini形式にします。
1 2 3 4 5 6 | [ENV] CAKE_ENV=development [DB] DB_USERNAME=user DB_PASSWORD=pass |
設定読み込み処理追加
リクエスト時に読み込まれるファイル(今回はbootstrap.phpにします)に以下を記載します。
1 2 3 4 5 6 | // .envファイル読み込み if (($env = @parse_ini_file(ENV)) !== false && is_array($env)) { foreach ($env as $key => $value) { putenv("${key}=${value}"); } } |
これで、コード上で「.env」に定義したファイルを読み込むことができます。
1 2 | $cakeEnv = env('CAKE_ENV'); print($cakeEnv); // development |
ちなみに、より柔軟に対応できる「PHP dotenv」というライブラリもありますが、今回はファイル名固定かつ最低限値が読み込めればよかったので、上記対応としました。