ホームページ  >  記事  >  php教程  >  Laravel が env 関数を使用して環境変数を null として読み取る問題を調査する

Laravel が env 関数を使用して環境変数を null として読み取る問題を調査する

高洛峰
高洛峰オリジナル
2017-03-24 15:11:452814ブラウズ

問題が見つかりました

Laravel プロジェクトで、PHP のartisan config:cache コマンドを実行して設定ファイルをキャッシュする場合、Tinker (Tinker は Laravel に付属する対話型コマンドライン インターフェイスです) で、env 関数を使用して環境を読み取ります変数の値は null であり、phpArtisan config:clear を実行して設定キャッシュをクリアした後でのみ読み取ることができます。これはなぜですか?

調べてみましょう

.env ファイルを開いて見てください。これらはすべて貴重なものです:

APP_ENV=local
APP_KEY=base64:JHE5bOkRg283uT0n1Zq/GgvGEer8ooYiB42/wIcCyvo=
APP_DEBUG=true
APP_LOG_LEVEL=debug
APP_URL=http://www.tanteng.me
  
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=tanteng.me
DB_USERNAME=homestead
DB_PASSWORD=secret


写真に示されているように:

Laravel が env 関数を使用して環境変数を null として読み取る問題を調査する

理由は何ですか?

Laravel では、php aritisan config:cache コマンドを実行すると、Laravel は app/config ディレクトリ内のすべての設定ファイルを「コンパイル」し、各設定ファイルの bootstrap/cache/config.php へのキャッシュ設定ファイルに統合します。環境変数は env 関数を通じて読み取ることができます。この関数はここで読み取ることができます。ただし、このキャッシュ構成ファイルを取得すると、他の場所で env 関数を使用して環境変数を読み取ることはできないため、null が返されます。

このコード、Illuminate/Foundation/Bootstrap/DetectEnvironment.php 行 18 を見てみましょう:

public function bootstrap(Application $app)
{
 if (! $app->configurationIsCached()) {
 $this->checkForSpecificEnvironmentFile($app);
  
 try {
  (new Dotenv($app->environmentPath(), $app->environmentFile()))->load();
 } catch (InvalidPathException $e) {
  //
 }
 }
}

このメソッドは、フレームワークの開始後に実行されます。このコードは、キャッシュ構成ファイルが存在する場合、環境変数は設定されず、キャッシュ構成ファイルが読み取られないことを示しています。

そのため、app/config ディレクトリの他の場所にある設定ファイルを読み取る場合は、env 関数を使用して環境変数を読み取らないでください。このように、phpArtisan config:cache を実行すると、env 関数は機能しなくなります。使用されるすべての環境変数は、app/config ディレクトリ内の構成ファイル内の env を通じて読み取られます。環境変数が他の場所で使用されている場合、構成ファイルは env 関数を使用する代わりに一律に読み取られます。

概要

上記がこの記事の全内容です。この記事の内容が皆さんの学習や仕事に少しでも役立つことを願っています。ご質問がある場合は、メッセージを残して連絡してください。

Laravel で env 関数を使用して環境変数を null として読み取る問題について詳しく説明した関連記事については、PHP 中国語 Web サイトに注目してください。

関連記事:

Laravel フレームワークでは、{{url}} と {{asset}} の違いは何ですか?

laravel での名前付きルートの使用

Laravel ルートに関するメモリダイレクト

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。