0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

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

Last updated at Posted at 2020-10-23

#環境
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

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?