Maison >php教程 >PHP开发 >Explorez le problème selon lequel Laravel utilise la fonction env pour lire les variables d'environnement comme nulles

Explorez le problème selon lequel Laravel utilise la fonction env pour lire les variables d'environnement comme nulles

高洛峰
高洛峰original
2017-03-24 15:11:452890parcourir

Problème trouvé

Dans le projet Laravel, si vous exécutez la commande php artisan config:cache pour mettre en cache le fichier de configuration, dans Tinker (Tinker est une interface de ligne de commande interactive fournie avec Laravel), la valeur de la variable d'environnement lue à l'aide de la fonction env est nulle. Elle ne peut être lue qu'après avoir vidé le cache de configuration en exécutant php artisan config:clear. Pourquoi cela ?

Découvreons

Ouvrez le fichier .env et voyez, ceux-ci sont précieux :

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


Comme le montre l'image :

Explorez le problème selon lequel Laravel utilise la fonction env pour lire les variables denvironnement comme nulles

Quelle est la raison ?

Dans Laravel, si vous exécutez la commande php aritisan config:cache, Laravel "compilera" et intégrera tous les fichiers de configuration du répertoire app/config dans un fichier de configuration de cache dans bootstrap/cache/config.php . Chaque fichier de configuration peut lire les variables d'environnement via la fonction env, qui peut être lue ici. Mais une fois que vous avez ce fichier de configuration du cache, vous ne pouvez pas lire les variables d'environnement en utilisant la fonction env ailleurs, donc null.

Jetons un coup d'œil à ce code, Illuminate/Foundation/Bootstrap/DetectEnvironment php ligne 18 :

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

Cette méthode s'exécutera après le démarrage du framework. Ce code montre que si un fichier de configuration du cache existe, les variables d'environnement ne seront pas définies et la configuration lira le fichier de configuration du cache. ne plus être lu.

Par conséquent, lors de la lecture de fichiers de configuration ailleurs dans le répertoire app/config, n'utilisez pas la fonction env pour lire les variables d'environnement. De cette façon, une fois que vous aurez exécuté php artisan config:cache, la fonction env ne fonctionnera pas. . Toutes les variables d'environnement à utiliser sont lues via env dans le fichier de configuration dans le répertoire app/config. Si les variables d'environnement sont utilisées ailleurs, le fichier de configuration est lu uniformément au lieu d'utiliser la fonction env.

Résumé

Ce qui précède est l'intégralité du contenu de cet article. J'espère que le contenu de cet article pourra être utile aux études ou au travail de chacun. Si vous avez des questions, vous pouvez partir. un message à communiquer.

Pour plus d'informations sur Laravel utilisant la fonction env pour lire les variables d'environnement nulles, veuillez faire attention au site Web PHP chinois pour les articles connexes !

Articles associés :

Dans le framework Laravel, quelle est la différence entre {{url}} et {{asset}} ?

laravel L'utilisation de routes nommées dans

Une note sur la redirection de la route Laravel

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn