Laravel 5 - env ​​() gibt immer null zurück

79

Ich versuche herauszufinden, warum mein env()Helfer immer zurückkommt null. Dies führt insbesondere in app.phpDateien zu Problemen, in denen env()standardmäßig häufig verwendete Helfer verwendet werden. Vielleicht eine mysteriöse Servereinstellung?

Meine env-Datei :

APP_ENV=production
APP_KEY=base64:mymagickey=
APP_DEBUG=false
APP_LOG_LEVEL=info
APP_URL=http://www.example.com

etc...

BEARBEITEN - Ich habe Folgendes versucht :

php artisan cache:clear
php artisan view:clear
php artisan config:cache

und natürlich benutze ich envhelfer wie folgt :env('APP_ENV')

Aber immer noch kein Erfolg. Der seltsame Teil ist, dass die $_ENVPHP-Variable jede einzelne Variable aus der .envDatei enthält.

Verschmelzung
quelle

Antworten:

172

env(...)Die Funktion funktioniert nicht, nachdem Sie die Konfiguration zwischengespeichert haben. (ab Laravel 5.2 bis aktuell 5.7)

Die Laravel-Dokumentation sagt

Wenn Sie den config:cacheBefehl während der Bereitstellung verwenden, müssen Sie sicherstellen, dass Sie die envFunktion nur aus Ihren Konfigurationsdateien und nicht von einer anderen Stelle in Ihrer Anwendung aus aufrufen .

Die richtige Antwort wäre also zu

Wenn Sie env aus Ihrer Anwendung heraus aufrufen, wird dringend empfohlen, dass Sie Ihren Konfigurationsdateien die richtigen Konfigurationswerte hinzufügen und stattdessen env von diesem Speicherort aus aufrufen, damit Sie Ihre env-Aufrufe in Konfigurationsaufrufe konvertieren können.

Und ich habe es aus derselben Dokumentation zitiert

Für eine schnelle Lösung reicht dies jedoch aus:

php artisan config:clear

Und jetzt sollte klar sein, warum es beim Versuch config:cachenicht geholfen hat, obwohl es die Konfiguration vor dem Caching löscht.

Jewgenij Afanasjew
quelle
Vielen Dank, php artisan config:cleardas einzige, was dazu beigetragen hat, dass meine AWS SES-Anmeldeinformationen gelesen wurden.
Joe Scotto
2
Daher denke ich, wir sollten so etwas nicht direkt env('APP_ENV') in unserer Anwendung verwenden. Stattdessen sollten wir eine Zeile schreiben in config/app.php: 'env' => env('APP_ENV'),. Dann verwenden wir es in unserem Code : config('app.env').
Kosmos
43

Hoffe, dieser Befehl wird dich retten

PHP Artisan Config: klar

sh6210
quelle
19

Fünf wichtige Befehle, wenn Ihr Laravel nach einigen Änderungen in .env oder im Datenbankordner oder aufgrund anderer Änderungen nicht wie erwartet funktioniert. Hier finden Sie eine vollständige Erklärung: https://www.youtube.com/watch?v=Q1ynDMC8UGg

php artisan config:clear
php artisan cache:clear
php artisan view:clear
php artisan route:clear
composer dump-autoload
Lerner
quelle
das gleiche Problem hier .... funktioniert nicht env (). Ich habe versucht, Cache zu entfernen, Composer Dump-Autoload .... etc. Ich benutze Laravel 5.5.44 und muss die Konfiguration aus der ENV-Datei mit \ Config :: get ()
calin24
Ich habe alle Befehle an einer Stelle aufgelistet, die Sie ausführen müssen, um Cache- Probleme mit der env-Datei oder der Konfiguration usw. zu beseitigen. Hier ist der Thread: stackoverflow.com/a/43041479/6935763 Bitte führen Sie alle aus und lassen Sie mich weiß, ob es immer noch nicht funktioniert.
Lerner
2
nur laufen php artisan config:cachefunktioniert nicht. Nachdem ich ausgeführt php artisan config:clearhabe, funktioniert es. Jetzt kann ich wieder env ($ key) verwenden. Thx @Learner
calin24
Ich habe Ihre Diskussion gelesen und meine Erklärung in die separate Antwort eingefügt. Bitte überprüfen Sie sie.
Jewgenij Afanasjew
14

Verwenden Sie \Config::get('app.env');stattdessen, env(APP_ENV);weil Sie irgendwann den gleichen Fehler erhalten und dies für eine Live-Website nicht gut ist.

Wenn Sie benutzerdefinierte Variablen aus Ihrer ENV hinzufügen möchten, rufen Sie Ihre Konfigurations-App auf und suchen Sie Folgendes:

/*
    |--------------------------------------------------------------------------
    | Application Environment
    |--------------------------------------------------------------------------
    |
    | This value determines the "environment" your application is currently
    | running in. This may determine how you prefer to configure various
    | services your application utilizes. Set this in your ".env" file.
    |
    */

'env' => env('APP_ENV', 'production'),

Fügen Sie unter " 'env' => env('APP_ENV', 'production')," eine neue Zeile hinzu. Dies kann beispielsweise Folgendes sein:

/*
    |--------------------------------------------------------------------------
    | Application Environment
    |--------------------------------------------------------------------------
    |
    | This value determines the "environment" your application is currently
    | running in. This may determine how you prefer to configure various
    | services your application utilizes. Set this in your ".env" file.
    |
    */

'env' => env('APP_ENV', 'production'),
'key' => env('APP_KEY'),

Sie können die Variable "key" folgendermaßen aufrufen:

\Config::get('app.key');

Immer wenn Sie der App-Umgebung eine neue Variable wie "Schlüssel" hinzufügen, müssen Sie config:cacheden Cache zurücksetzen.

DIGITALKRIMINAL
quelle
Ich bin nicht sicher, aber möglicherweise tritt dieser Fehler nur in Windows auf. Aber Ihre Lösung hat es auch in Windows gelöst. Funktioniert es in einer Linux-Produktionsumgebung?
Amit Shah
@AmitShah, es ist kein Fehler, es ist eine Funktion. Bitte überprüfen Sie meine Antwort für Details.
Jewgenij Afanasjew
11

Der folgende Befehl hat bei mir funktioniert. Ich habe versehentlich alle Cache-Dateien gelöscht. Also env('something')wurde null zurückgegeben.

php artisan optimize:clear
Santosh Kumar
quelle
10

Es ist ein ".env" bekannter Fehler, der behoben werden kann mit:

php artisan config:cache
vpdeva
quelle
15
Einige Benutzer müssen möglicherweise PHP
Artisan
6
Laravel 5.5 Ich musste 'php artisan config: clear' ausführen. Danke
dacastro4
4
PHP Artisan Config: Cache ist der Grund, warum env () Werte null sind. Wenn Sie Ihre Konfigurations- und Env-Variablen zwischenspeichern möchten, sollten Sie env () nur an Konfigurationsdateien verwenden, da env () nach dem Zwischenspeichern immer null zurückgibt. Obwohl ich jetzt auch sehe, dass config () und Config :: get () Helfer nach dem Caching null zurückgeben, was auch seltsam ist.
BRBdot
Follow-up zu oben - ... Dann sollten Sie feststellen, dass der config () -Helfer auch nicht direkt auf Werte in .env zugreifen kann. Sie müssen eine vorhandene config / <Name der Konfigurationsdatei einfügen> .php-Konfigurationsdatei erstellen oder verwenden und Ihren Konfigurationseintrag aus .env erstellen und dann diesen zugeordneten Wert verwenden.
BRBdot
1

Wenn die akzeptierte Antwort das Problem nicht behebt, überprüfen Sie, ob die ENV-Datei über die richtige Lese- und Schreibberechtigung verfügt. Wenn die Datei nicht vom Framework / der Bibliothek gelesen werden kann, sind die Werte immer null. Ich bin bei einem meiner Lumen-Projekte auf dieses Problem gestoßen, aber nach dem Ändern der Dateiberechtigungen hat es funktioniert.

Sachithd
quelle
0

Ich weiß, dass dies ein sehr alter Thread ist und der Grund möglicherweise nicht der gleiche ist. Aber das gleiche Problem ist mir passiert.

Der Grund war, dass ich ein Problem in der .env-Datei hatte. Das habe ich in .env bekommen

TEST="e@1asa

Beachten Sie, dass das Endzitat fehlt. Und es sollte so sein,

TEST="e@1asa"

Alle env-Variablen, die ich danach hinzugefügt habe, haben aufgrund dieses Fehlers null zurückgegeben.

Es wurde auch nichts in das Fehlerprotokoll geschrieben. Wenn Sie diesen Fehler festgestellt haben , fügen Sie eine Beispiel-Env-Variable als ersten Datensatz der Datei hinzu . Wenn es funktioniert und die Aufzeichnung endlich nicht funktioniert, liegt möglicherweise ein Fehler in .env vor

Aruna Perera
quelle
0

Platzieren Sie die ENV-Datei im Stammordner des Projekts

Fügen Sie diese der Datei app.php hinzu.

try {
    (new Dotenv\Dotenv(__DIR__.'/../'))->load();
} catch (Dotenv\Exception\InvalidPathException $e) {
    echo $e;
}
Thushara Buddhika
quelle