CakePHP 3 で .env 使用時に LogicException が出たときの対応方法
はじめに
CakePHP 3 で構築した .env ファイルを使用しているシステムで、下記エラーが出た際に行った対応をご紹介します。
Fatal error: Uncaught LogicException: Key "●●●" has already been defined in getenv()
- CakePHP
- 3.8.2
- OS
- Win10
- Apache
- 2.4.39
- PHP
- 7.3.4
解決方法
config/bootstrap.php の中に .env を読み込む下記コードがあります。
config/bootstrap.php
if (!env('APP_NAME') && file_exists(CONFIG . '.env')) {
$dotenv = new \josegonzalez\Dotenv\Loader([CONFIG . '.env']);
$dotenv->parse()
->putenv()
->toEnv()
->toServer();
}
この中の putenv() の引数に true を与えたところ、エラーは出なくなりました。
config/bootstrap.php
$dotenv->parse()
->putenv(true) // ←ここを変更
->toEnv()
この解決策は、CakePHP3で使用している .env 読み込みのライブラリ「PHP Dotenv」のREADME.markdown を参考にしました。
(下記リンクから当該箇所を閲覧できます)
- GitHub - josegonzalez/php-dotenv: dotenv file loader for PHP
- https://github.com/josegonzalez/php-dotenv#making-available-to-getenv
最初はエラーメッセージでググって試行錯誤してたのですが、なかなか解決策は見つからず。困ったらまずは公式ドキュメントに目を通しましょう!
でも、ついエラーメッセージで調べちゃうんだよなー笑