Laravel 5.2 ne lit pas le fichier env


111

Après la mise à niveau vers Laravel 5.2, aucune de mes .envvaleurs de fichier n'est en cours de lecture. J'ai suivi les instructions de mise à niveau ; aucun de mes fichiers de configuration n'a été modifié sauf auth.php. Ils fonctionnaient tous très bien dans la version précédente, 5.1.19

.env contient des valeurs telles que

DB_DATABASE=mydb
DB_USERNAME=myuser

config/database.php contient

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

J'obtiens cette erreur:

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

Ne tirant clairement pas dans ma configuration d'environnement. Cela affecte chacun de mes fichiers de configuration, y compris des tiers tels que bugsnag.

J'ai aussi essayé

php artisan config:clear
php artisan cache:clear

Mettre à jour

En essayant php artisan tinker

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

J'ai essayé d'installer une nouvelle copie de Laravel 5.2. Je n'ai pratiquement copié que dans mon appdossier; aucun package de composition supplémentaire n'est inclus. J'ai toujours le même problème. J'ai d'autres projets Laravel 5.2 sur le même serveur qui fonctionnent bien.


1
Êtes-vous sûr que le fichier .env est nommé uniquement .env? Pas .env.example?
James Elliott

Andrew éditez-vous le fichier .env par l'interface de forge ou le téléchargez-vous?
Mark Davidson

@JamesElliott oui c'est.env
andrewtweber

1
Ou exécutez-vous cela localement? Si votre exécution sous un service artisanal, vous devez le redémarrer au cas où cela pourrait être le cas.
Mark Davidson

@MarkDavidson le modifiant via vi dans la ligne de commande, et non, il est sur un serveur complet
andrewtweber

Réponses:


92

À partir des notes de mise à jour officielles de Laravel 5.2:

Si vous utilisez la config:cachecommande pendant le déploiement, vous devez vous assurer que vous n'appelez la envfonction qu'à partir de vos fichiers de configuration, et non de n'importe où ailleurs dans votre application.

Si vous appelez envdepuis votre application, il est fortement recommandé d'ajouter les valeurs de configuration appropriées à vos fichiers de configuration et d'appeler à envpartir de cet emplacement à la place, ce qui vous permet de convertir vos envappels en configappels.

Référence: https://laravel.com/docs/5.2/upgrade#upgrade-5.2.0


36
php artisan config:cacherésolu pour moi - rien d'autre n'avait aidé. Pas même php artisan config:clear- merci!
kair

36
Laravel 5.3 php artisan config:clearest la seule chose qui a fonctionné pour moi
Peon

9
Laravel 5.4 - déployé sur un VPS: a php artisan config:clearfonctionné pour moi. Je n'avais pas fait config: cache avant, donc ça me semblait un peu bizarre de devoir vider le cache.
Antonio


assurez-vous que vous modifiez .envau lieu de .env.examplefichier
Connor Leech

85

Si l'une de vos .envvariables contient des espaces, assurez-vous de les mettre entre guillemets. Par exemple:

SITE_NAME="My website"

N'oubliez pas de vider votre cache avant de tester:

php artisan config:cache
php artisan config:clear

Oui ça marche. Après avoir changé une valeur dans le .envfichier, exécutez la php artisan config:cache & php artisan config:clearcommande. Ça va marcher.
Chandan Sharma

42

Sensationnel. Bon chagrin. C'est parce que j'avais une valeur env avec un espace dedans, pas entouré de guillemets

Ce

SITE_NAME=My website

Changé à ceci

SITE_NAME="My website"

Corrigé. Je pense que cela a à voir avec Laravel 5.2 qui met maintenant à jour vlucas / phpdotenv de 1.1.1 à 2.1.0


Idem - il semble que les espaces causent des problèmes dans la version .env5.2 alors que dans la version 5.1, ce n'est pas le cas.
thomthom

5
Et c'est l'un de mes (nombreux) problèmes avec Laravel: il a l'habitude d'ignorer et d'accepter parfois silencieusement une variété de configurations et / ou d'autres types d'erreurs, sans aucune indication que quelque chose ne va pas. Étant donné que cela peut être une "fonctionnalité" de phpdotenv, mais Laravel sait toujours qu'il y a un .envfichier qui doit être inclus, et qu'il n'a pas réussi, mais ne prend pas la peine de le dire à personne.
dKen

2
J'ai déjà perdu des heures sur quelque chose d'aussi stupide. Merci de m'avoir empêché de gaspiller plus!
Jenski

30

Pour moi, cela a fonctionné dans cet ordre:

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

Et j'ai essayé tout le reste sans chance.


2
Cette commande a résolu mon problème après quelques heures de débogage.
Minion

Sauvé ma vie. Tks. Mais je n'ai pas compris pourquoi.
Mateus Galasso

cet ordre m'a sauvé. Merci
Asad ullah

Merci gentil étranger d'Internet, c'est fait!
Eduardo le

Si tu recevais 1 $ à chaque fois que j'en viens à cette réponse, tu serais déjà riche. Merci!
Altin le

26

J'ai eu un problème similaire dans mon config/services.phpet j'ai résolu en utilisant les commandes config clearet optimize:

php artisan config:clear
php artisan optimize

25

Pour moi, ce qui suit a fonctionné

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

18

lance ça:

php artisan config:clear
php artisan cache:clear

puis
php artisan config:cache


12

J'ai eu le même problème sur l'environnement local, j'ai résolu par

  1. config artisan php: effacer
  2. php artisan config: cache
  3. puis annulez la commande php artisan serve, puis redémarrez.

12

Vous pouvez résoudre le problème par la recommandation suivante

Recommandation 1:

Vous devez utiliser le fichier .env via les fichiers de configuration, ce qui signifie que vous êtes invité à lire le fichier .env à partir des fichiers de configuration (tels que /config/app.php ou /config/database.php), puis vous pouvez utiliser la configuration fichiers de n'importe quel emplacement de votre projet.

Recommandation 2: définissez votre valeur d'environnement entre guillemets doubles

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

Recommandation 3: Conservez la séquence de commandes suivante après avoir modifié une configuration ou une valeur d'environnement.

 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

Recommandation 4: lorsque la syntaxe1 ne fonctionne pas, vous pouvez essayer une autre syntaxe2

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

Recommandation 5: Lorsque votre nombre d'utilisateurs est élevé / supérieur, vous devez augmenter la taille de mémoire associée dans la configuration du serveur .

Recommandation 6: définissez une valeur probable par défaut lorsque vous lisez la variable .env.

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

12

Lorsque vous avez lancé la commande, php artisan config:cacheelle effacera toutes les envvariables et env()donnera des valeurs nulles, essayez d'exécuter la commande suivante et boom là, vous env()recommencez à attraper toutes les envvariables

php artisan config:clear

Comme par magie, cela a fonctionné pour moi - excellente réponse!
David Partyka

10

J'ai manqué ceci dans les instructions de mise à niveau:

Ajoutez une option de configuration d'env à votre app.phpfichier de configuration qui ressemble à ce qui suit: 'env' => env('APP_ENV', 'production')

L'ajout de cette ligne a permis .envde lire correctement le fichier local .


1
Je suppose que j'ai eu la même erreur, puisque mon application était Laravel 4, puis mise à niveau vers 5.0, puis vers 5.1, etc. J'ai probablement manqué d'ajouter cette valeur dans mon app.php. Merci de m'avoir fait gagner beaucoup de temps. Voici un vote positif!
Bruno P. Kinoshita

9

La simplicité est la puissance:

php artisan config:cache

Vous allez recevoir:

Cache de configuration effacé!

Configuration mise en cache avec succès!


7

La même chose se produit lorsque: le port est dans votre .env local

encore une fois les guillemets doubles font l'affaire

APP_URL="http://localhost:8000"

puis

php artisan config:clear


4

En plus de ce que @andrewtweber a suggéré, assurez-vous de ne pas avoir d'espaces entre KEY = et la valeur à moins qu'elle ne soit entre guillemets

Fichier .env par exemple:

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

à:

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

3

J'ai rencontré ce même problème sur ma section locale, et j'ai essayé toutes les réponses ici, mais en vain. Seul cela a fonctionné pour moi, php artisan config:clearet restart server. Fonctionne comme un charme!


4
@RameshMhetre try php artisan config:cache, php artisan config:clearthenphp artisan cache:clear
Dexter Bengil

2

J'ai résolu ce problème en générant une nouvelle clé à l'aide de la commande: php artisan key:generate


2

si vous avez appelé config: cache pendant le développement local, vous pouvez annuler cela en supprimant le fichier bootstrap / cache / config.php. et c'est du travail pour moi.


2

si vous avez appelé config: cache pendant le développement local, vous pouvez annuler cela en supprimant le fichier bootstrap / cache / config.php. et c'est du travail pour moi.

@ Payal Pandav a donné le commentaire ci-dessus.

Je veux dire une solution de contournement simple. Modifiez simplement le fichier config.php dans le dossier bootstrap / cache /. Et changez les informations d'identification. Cela a fonctionné pour moi. Veuillez ne pas supprimer ce fichier car il peut contenir d'autres données cruciales dans l'environnement de production.


2

Dans mon cas, laravel 5.7 env('APP_URL')ne fonctionne pas mais config('app.url')fonctionne. Si j'ajoute une nouvelle variable à envet à config - cela ne fonctionne pas - mais après php artisan config:cachele démarrage, cela fonctionne.


3
Si vous êtes dans un environnement de développement, vous ne devriez pas mettre en cache votre configuration et vos routes. Pour supprimer tout le cache, vous pouvez utiliser:php artisan optimize:clear
Zohaib

@ZohaibHassan Comment désactiver le cache pour la configuration et les routes sur l'environnement de développement?
Kamil Kiełczewski

1
La commande ci-dessus désactivera 1. cache des routes, 2 cache de configuration, 3. effacer les vues 4. effacer les fichiers optimisés 5. vider le cache le cas échéant
Zohaib

1
Pour la configuration uniquement, vous pouvez l'utiliser php artisan config:cleareffacera votre cache de configuration et ne générera pas à nouveau et lorsque vous passerez en production, vous pouvez exécuter php artisan config:cachepour mettre en cache vos configurations
Zohaib

1

Si vous exécutez cette php artisan config:cachecommande sur la console, elle stockera tout le contenu du fichier .env dans le cache, après cette commande si vous ajoutez du contenu dans le fichier .env, il ne sera pas disponible tant que vous n'exécuterez pas la php artisan config:clearcommande


1

Je suis confronté au même problème pendant le développement larvaire. parfois, env cesse de fonctionner et ne renvoie aucune valeur. cette raison peut être différente selon votre situation. mais dans mon cas il y a quelques jours je viens de courir

 PHP artisan::config:clear

soyez donc prudent avec cette commande. car il effacera toutes les données de configuration de son cache. donc après cela, il ne renverra aucune valeur. Donc, dans cette situation, vous devez d'abord l'utiliser si vous avez exécuté la commande PHP artisan config :: clear .

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

1

J'ai vécu cela. La raison était qu'apache (utilisateur www-data) ne pouvait pas lire .env en raison des autorisations de fichier. J'ai donc changé les autorisations de fichier pour m'assurer que le serveur (apache) avait des autorisations de lecture sur le fichier. Juste ça et boum, tout fonctionnait maintenant!
Mise à jour:
La procédure à suivre varie en fonction du propriétaire du fichier .env, mais en supposant qu'il appartient au www-datagroupe Apache , vous pouvez le faire:

sudo chmod g+r .env

Modifiez-le en fonction de votre structure d'autorisation.


So i changed the file permissions to ensure that the server (apache) had read permissions to the file.c'est en fait une mauvaise approche. Vous devriez avoir corrigé la configuration d'apaxhe afin qu'il serve ce site particulier en tant que propriétaire de ces fichiers
Marcin Orlowski

0

J'ai fait l'erreur en faisant dd / die / dump dans le index.phpfichier. Cela empêche le système de régénérer les configurations.

Faites simplement un vidage dans les fichiers de vue. Les modifications apportées au .envfichier se mettent à jour instantanément.


0

J'ai eu quelques problèmes avec ça. Cela semblait être un problème d'autorisation de fichier quelque part dans l'application - pas le fichier .env.

J'ai dû - arrêter mon docker - utiliser chown pour définir les droits de propriété de mon propre utilisateur pour l'ensemble du projet - redémarrer le docker

Cette fois, cela a fonctionné.


-1

J'ai essayé presque tout ce qui précède. Fini par faire

chmod 666 .env

qui a fonctionné. Ce problème semble continuer à surgir sur l'application dont j'ai hérité, cependant, cette dernière fois était après l'ajout d'un .env.testing. Lancer Laravel 5.8

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.