Heim  >  Artikel  >  php教程  >  Untersuchen Sie das Problem, dass Laravel die env-Funktion verwendet, um Umgebungsvariablen als Null zu lesen

Untersuchen Sie das Problem, dass Laravel die env-Funktion verwendet, um Umgebungsvariablen als Null zu lesen

高洛峰
高洛峰Original
2017-03-24 15:11:452872Durchsuche

Problem gefunden

Wenn Sie im Laravel-Projekt den Befehl php artisan config:cache ausführen, um die Konfigurationsdatei zwischenzuspeichern, in Tinker (Tinker ist eine interaktive Befehlszeilenschnittstelle, die mit Laravel geliefert wird), Der Wert der mit der env-Funktion gelesenen Umgebungsvariablen ist null. Sie kann erst gelesen werden, nachdem der Konfigurationscache durch Ausführen von php artisan config:clear geleert wurde.

Lassen Sie es uns herausfinden

Öffnen Sie die .env-Datei und sehen Sie, diese sind wertvoll:

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


Wie im Bild gezeigt:

Untersuchen Sie das Problem, dass Laravel die env-Funktion verwendet, um Umgebungsvariablen als Null zu lesen

Was ist der Grund?

Wenn Sie in Laravel den Befehl php aritisan config:cache ausführen, „kompiliert“ Laravel alle Konfigurationsdateien im Verzeichnis app/config und integriert sie in eine Cache-Konfigurationsdatei in bootstrap/cache/config.php . Jede Konfigurationsdatei kann Umgebungsvariablen über die env-Funktion lesen, die hier gelesen werden kann. Aber sobald Sie diese Cache-Konfigurationsdatei haben, können Sie die Umgebungsvariablen nicht mehr mit der env-Funktion an anderer Stelle lesen, also null.

Werfen wir einen Blick auf diesen Code, Illuminate/Foundation/Bootstrap/DetectEnvironment PHP Zeile 18:

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

Diese Methode wird ausgeführt, nachdem das Framework gestartet wurde. Dieser Code zeigt, dass Umgebungsvariablen nicht festgelegt werden und die Konfiguration die Cache-Konfigurationsdatei liest nicht mehr gelesen werden.

Verwenden Sie daher beim Lesen von Konfigurationsdateien an anderer Stelle im Verzeichnis app/config nicht die Funktion env zum Lesen von Umgebungsvariablen. Auf diese Weise funktioniert die Funktion env nicht, sobald Sie php artisan config:cache ausführen . . Alle zu verwendenden Umgebungsvariablen werden über env in der Konfigurationsdatei im Verzeichnis app/config gelesen. Wenn Umgebungsvariablen an anderer Stelle verwendet werden, wird die Konfigurationsdatei einheitlich gelesen, anstatt die Funktion env zu verwenden.

Zusammenfassung

Das Obige ist der gesamte Inhalt dieses Artikels. Ich hoffe, dass der Inhalt dieses Artikels für alle beim Lernen oder bei der Arbeit hilfreich sein kann eine Botschaft zum Mitteilen.

Weitere Informationen darüber, wie Laravel die env-Funktion zum Lesen von Umgebungsvariablen verwendet, die null sind, finden Sie auf der chinesischen PHP-Website für verwandte Artikel!

Verwandte Artikel:

Was ist im Laravel-Framework der Unterschied zwischen {{url}} und {{asset}}?

Laravel Die Verwendung benannter Routen in

Ein Hinweis zur Laravel-Routenumleitung

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn