Laravel 5.2 non legge il file env


110

Dopo l'aggiornamento a Laravel 5.2, nessuno dei miei .envvalori di file viene letto. Ho seguito le istruzioni per l' aggiornamento ; nessuno dei miei file di configurazione è stato modificato tranne auth.php. Funzionavano tutti bene nella versione precedente, 5.1.19

.env contiene valori come

DB_DATABASE=mydb
DB_USERNAME=myuser

config/database.php contiene

'mysql' => [
    'database' => env('DB_DATABASE', 'forge'),
    'username' => env('DB_USERNAME', 'forge'),
]

Ottengo questo errore:

PDOException: SQLSTATE[HY000] [1045] Access denied for user 'forge'@'localhost' (using password: NO)

Chiaramente non inserisco la mia configurazione env. Questo sta influenzando tutti i miei file di configurazione, incluse terze parti come bugsnag.

Ho anche provato

php artisan config:clear
php artisan cache:clear

Aggiornare

Provando php artisan tinker

>>> env('DB_DATABASE')
=> null
>>> getenv('DB_DATABASE')
=> false
>>> config('database.connections.mysql.database')
=> "forge"
>>> dd($_ENV)
[]

Ho provato a installare una nuova copia di Laravel 5.2. Fondamentalmente ho solo copiato nella mia appcartella; nessun pacchetto compositore aggiuntivo è incluso. Ho ancora lo stesso problema. Ho altri progetti Laravel 5.2 sullo stesso server che funzionano bene.


1
Sei sicuro che il file .env si chiami solo .env? Non .env.example?
James Elliott

Andrew, stai modificando il file .env dall'interfaccia di Forge o lo stai caricando?
Mark Davidson

@JamesElliott sì, lo è.env
andrewtweber

1
O lo stai eseguendo localmente? Se stai eseguendo un servizio artigianale, devi riavviarlo nel caso in cui potrebbe essere il caso.
Mark Davidson

@MarkDavidson lo modifica tramite vi nella riga di comando, e no, è su un server completo
andrewtweber

Risposte:


91

Dalle note ufficiali di aggiornamento di Laravel 5.2:

Se si utilizza il config:cachecomando durante la distribuzione, è necessario assicurarsi di chiamare la envfunzione solo dall'interno dei file di configurazione e non da qualsiasi altra parte dell'applicazione.

Se stai chiamando envdall'interno della tua applicazione, si consiglia vivamente di aggiungere i valori di configurazione appropriati ai file di configurazione e di chiamare invece envda quella posizione, consentendo di convertire le envchiamate in configchiamate.

Riferimento: https://laravel.com/docs/5.2/upgrade#upgrade-5.2.0


36
php artisan config:cacherisolto per me - nient'altro aveva aiutato. Nemmeno php artisan config:clear- grazie!
kair

36
Laravel 5.3 php artisan config:clearè l'unica cosa che ha funzionato per me
Peon

9
Laravel 5.4 - distribuito su un VPS: ha php artisan config:clearfunzionato per me. Non ho fatto config: cache prima, quindi mi è sembrato un po 'strano dover svuotare la cache.
Antonio


assicurati di modificare .envinvece del .env.examplefile
Connor Leech

84

Se una delle tue .envvariabili contiene spazi bianchi, assicurati di racchiuderli tra virgolette doppie. Per esempio:

SITE_NAME="My website"

Non dimenticare di svuotare la cache prima di eseguire il test:

php artisan config:cache
php artisan config:clear

Sì, funziona. Dopo aver modificato qualsiasi valore nel .envfile, eseguire il php artisan config:cache & php artisan config:clearcomando. Funzionerà.
Chandan Sharma

41

Wow. Santo cielo. È perché avevo un valore env con uno spazio, non racchiuso tra virgolette

Questo

SITE_NAME=My website

Cambiato in questo

SITE_NAME="My website"

Aggiustato. Penso che questo avesse a che fare con Laravel 5.2 che ora aggiorna vlucas / phpdotenv da 1.1.1 a 2.1.0


Stesso pensiero: sembra che gli spazi causino problemi in .envmeno di 5.2, dove come in 5.1 non lo faceva.
domani

5
E questo è uno dei miei (tanti) bugbear con Laravel: ha l'abitudine di ignorare e accettare a volte silenziosamente una varietà di configurazioni e / o altri tipi di errori, senza alcuna indicazione che qualcosa sia andato storto. Dato, questa potrebbe essere una "caratteristica" di phpdotenv, ma Laravel sa ancora che c'è un .envfile che deve essere incluso e che non ha avuto successo, ma non si preoccupa di dirlo a nessuno.
dKen

2
Ho già sprecato ore in qualcosa di così stupido. Grazie per avermi impedito di sprecare di più!
Jenski

29

Per me ha funzionato in questo ordine:

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

E ho provato tutte le pause senza fortuna.


2
Questo ordine ha risolto il mio problema dopo poche ore di debug.
Minion

Salvato la mia vita. Tks. Ma id non ha capito perché.
Mateus Galasso

questo ordine mi ha salvato. Grazie
Asad ullah,

Grazie gentile sconosciuto di Internet, questo ha fatto!
Eduardo

Se ricevessi $ 1 ogni volta che arrivo a questa risposta, saresti già ricco. Grazie!
Altin

25

Ho avuto un problema simile nel mio config/services.phpe ho risolto usando config cleare optimizecomandi:

php artisan config:clear
php artisan optimize

24

Per me ha funzionato quanto segue

- php artisan config:cache
- php artisan config:clear
- php artisan cache:clear

17

eseguire questo:

php artisan config:clear
php artisan cache:clear

poi
php artisan config:cache


11

Ho avuto lo stesso problema sull'ambiente locale, ho risolto da

  1. php artisan config: clear
  2. configurazione artisan php: cache
  3. e quindi annullare il comando php artisan serve e riavviare di nuovo.

11

È possibile risolvere il problema con la seguente raccomandazione

Raccomandazione 1:

Devi usare il file .env attraverso i file di configurazione, il che significa che ti viene richiesto di leggere il file .env dai file di configurazione (come /config/app.php o /config/database.php), quindi puoi usare la configurazione file da qualsiasi posizione del progetto.

Raccomandazione 2: imposta il valore env tra virgolette doppie

 GOOGLE_CLIENT_ID="887557629-9h6n4ne.apps.googleusercontent.com"
 GOOGLE_CLIENT_SECRET="YT2ev2SpJt_Pa3dit60iFJ"
 GOOGLE_MAP="AIzaSyCK6RWwql0DucT7Sl43w9ma-k8qU"

Raccomandazione 3: mantenere la seguente sequenza di comandi dopo aver modificato qualsiasi configurazione o valore env.

 composer dump-autoload
 composer dump-autoload -o

 php artisan clear-compiled
 php artisan optimize

 php artisan route:clear
 php artisan view:clear

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

Raccomandazione 4: quando la sintassix1 non funziona, puoi provare un'altra sintassi2

   $val1 = env('VARIABLE_NAME');     // syntax1
   $val2 = getenv('VARIABLE_NAME');  // syntax2
   echo 'systax1 value is:'.$val1.' & systax2 value is:'.$val2;

Raccomandazione 5: quando il numero di utenti è alto / maggiore, è necessario aumentare la dimensione della memoria correlata nella configurazione del server .

Raccomandazione 6: impostare un valore probabile predefinito durante la lettura della variabile .env.

 $googleClinetId=env("GOOGLE_CLIENT_ID","889159-9h6n95f1e.apps.googleusercontent.com");
 $googleSecretId=env("GOOGLE_CLIENT_ID","YT2evBCt_Pa3dit60iFJ");
 $googleMap=env("GOOGLE_MAP","AIzaSyCK6RUl0T7Sl43w9ma-k8qU");

11

Quando hai lanciato il comando php artisan config:cache, cancellerà tutte le envvariabili e env()darà valori nulli, prova a eseguire il comando successivo e boom lì env(), inizi di nuovo a catturare tutte le envvariabili

php artisan config:clear

Come per magia, questo ha funzionato per me - ottima risposta!
David Partyka

9

Mi mancava questo nelle istruzioni per l'aggiornamento:

Aggiungi un'opzione di configurazione env al tuo app.phpfile di configurazione simile al seguente: 'env' => env('APP_ENV', 'production')

L'aggiunta di questa riga ha .envconsentito di leggere correttamente il file locale .


1
Immagino di aver ricevuto lo stesso errore, poiché la mia app era Laravel 4, quindi aggiornata a 5.0, quindi a 5.1, ecc. Probabilmente non ho aggiunto questo valore nel mio app.php. Grazie per avermi risparmiato un sacco di tempo. Ecco un voto positivo!
Bruno P. Kinoshita

8

La semplicità è il potere:

php artisan config:cache

Riceverai:

Cache di configurazione cancellata!

Configurazione memorizzata nella cache con successo!


6

La stessa cosa accade quando: port è nel tuo .env locale

ancora una volta le virgolette doppie fanno il trucco

APP_URL="http://localhost:8000"

e poi

php artisan config:clear


4

Inoltre, oltre a quanto suggerito da @andrewtweber, assicurati di non avere spazi tra KEY = e il valore a meno che non sia tra virgolette

file .env ad esempio:

...
SITE_NAME= My website
MAIL_PORT= 587
MAIL_FROM_NAME= websitename
...

per:

...
SITE_NAME="My website"
MAIL_PORT=587
MAIL_FROM_NAME=websitename
...

3

Mi sono imbattuto in questo stesso problema sul mio locale e ho provato tutte le risposte qui ma senza alcun risultato. Solo questo ha funzionato per me, php artisan config:cleare restart server. Funziona come un fascino!


4
@RameshMhetre prova php artisan config:cache, php artisan config:clearquindiphp artisan cache:clear
Dexter Bengil

2

Ho risolto questo problema generando una nuova chiave utilizzando il comando: php artisan key:generate


2

se hai chiamato config: cache durante lo sviluppo locale, puoi annullarlo eliminando il file bootstrap / cache / config.php. e questo è lavoro per me.


2

se hai chiamato config: cache durante lo sviluppo locale, puoi annullarlo eliminando il file bootstrap / cache / config.php. e questo è lavoro per me.

@Payal Pandav ha dato il commento sopra.

Voglio dire una semplice soluzione alternativa. Basta modificare il file config.php nella cartella bootstrap / cache /. E cambia le credenziali. Questo ha funzionato per me. Si prega di non cancellare questo file poiché potrebbe contenere altri dati cruciali nell'ambiente di produzione.


2

Nel mio caso laravel 5.7 env('APP_URL')non funziona ma config('app.url')funziona. Se aggiungo una nuova variabile a enve alla configurazione, non funziona, ma dopo che php artisan config:cachesi avvia funziona.


3
Se sei in un ambiente di sviluppo non dovresti memorizzare nella cache la configurazione e le rotte. Per rimuovere tutta la cache puoi utilizzare:php artisan optimize:clear
Zohaib

@ZohaibHassan Come disattivare la cache per la configurazione e le rotte nell'ambiente di sviluppo?
Kamil Kiełczewski

1
Il comando sopra disattiverà 1. cache delle rotte, 2 cache di configurazione, 3. cancella le visualizzazioni 4. cancella i file ottimizzati 5. cancella l'eventuale cache
Zohaib

1
Solo per la configurazione puoi usarlo php artisan config:clearcancellerà la cache di configurazione e non verrà generata di nuovo e quando andrai in produzione puoi eseguire la php artisan config:cachecache delle tue configurazioni
Zohaib

1

Se esegui questo php artisan config:cachecomando sulla console, memorizzerà tutti i contenuti del file .env nella cache, dopo questo comando se aggiungi dei contenuti al file .env non sarà disponibile finché non esegui il php artisan config:clearcomando


1

Devo affrontare lo stesso problema per molto tempo durante lo sviluppo larvale. alcune volte env smette di funzionare e non restituisce alcun valore. questo motivo può essere diverso a seconda della tua situazione. ma nel mio caso qualche giorno fa corro e basta

 PHP artisan::config:clear

quindi fai attenzione all'uso di questo comando. perché cancellerà tutti i dati di configurazione dalla sua cache. quindi dopo di ciò, non restituirà alcun valore. Quindi, in questa situazione, devi prima usarlo se hai eseguito il comando PHP artisan config :: clear .

php artisan config:cache  // it will cache all data 
php artisan config:clear
Configuration cache cleared!

1

L'ho sperimentato. Il motivo era che apache (utente www-data) non poteva leggere .env a causa dei permessi dei file. Quindi ho cambiato i permessi del file per assicurarmi che il server (apache) avesse i permessi di lettura sul file. Solo quello e boom, ora funzionava tutto!
Aggiornamento:
come farlo varia, a seconda di chi possiede il file .env, ma supponendo che appartenga al www-datagruppo Apache , puoi farlo:

sudo chmod g+r .env

Modificalo in base alla struttura dei tuoi permessi.


So i changed the file permissions to ensure that the server (apache) had read permissions to the file.questo è in realtà un approccio sbagliato. Dovresti aver corretto apaxhe config in modo che serva questo particolare sito come proprietario che possiede questi file
Marcin Orlowski

0

Ho commesso l'errore eseguendo dd / die / dump nel index.phpfile. Ciò fa sì che il sistema non rigeneri le configurazioni.

Basta eseguire il dump nei file di visualizzazione. Le modifiche al .envfile vengono aggiornate istantaneamente.


0

Ho avuto dei problemi con questo. Sembrava essere un problema di autorizzazione del file da qualche parte nell'app, non il file .env.

Ho dovuto - fermare la mia finestra mobile - usare chown per impostare i diritti di proprietà sul mio utente per l'intero progetto - riavviare la finestra mobile di nuovo

Questa volta ha funzionato.


-1

Ho provato quasi tutto quanto sopra. Finito per fare

chmod 666 .env

che ha funzionato. Questo problema sembra continuare a sorgere sull'app che ho ereditato, tuttavia, l'ultima volta è stato dopo aver aggiunto un .env.testing. Eseguire Laravel 5.8

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.