Help us understand the problem. What is going on with this article?

Laravelのenvメソッドがスレッドセーフ版のPHPでは正常に機能しない

環境

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

mirror0770
フリーのWebエンジニアやってます。 PHPでlaravel、cakeなど使って開発しています。
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away