#環境
Windows 10 Pro
Apache 2.4
PHP 7.3 スレッドセーフ版
Laravel 6.18
#現象について
Laravelでの開発中に
envメソッドで時々値が読み込めない場合や
Apacheの公開ディレクトリに配置している他プロジェクトの環境変数を取得してしまう?現象が発生した。
(他プロジェクトの環境変数を取得しているかは確証はないがそれっぽい値を取得してしまう)
調査した結果
PHPのgetenvがスレッドセーフ版のPHPでは正常に機能しないことを発見した。
#対応策について
設定ファイルをキャッシュすればいいらしい。
php artisan config:cache
設定ファイルをキャッシュすると
envメソッドが実行されなくなるので注意が必要である。
環境変数を変更した場合はその都度上記コマンドを実行し
キャッシュを更新する必要がある。
#まとめ
Windows+Apache環境でLaravelの開発をする場合、
この現象に遭遇する確率が高いので注意が必要。
ちなみにLaravelの公式ドキュメントには
この問題への注意喚起はないと思われる。
(あったらすみません)
ノンスレッドセーフ版なら上記の問題は発生しないので
dockerでノンスレッドセーフ版の環境を作って開発したほうがいい気がしてきた...
#参考URL
laravelやphpdotenvのissueで既に議論されていたのでご参考に
https://github.com/laravel/framework/issues/8191
https://github.com/vlucas/phpdotenv/issues/76