Maison  >  Article  >  développement back-end  >  Discutez de l'efficacité des variables d'environnement dans les fichiers Lumen/Laravel .env

Discutez de l'efficacité des variables d'environnement dans les fichiers Lumen/Laravel .env

巴扎黑
巴扎黑original
2017-07-19 11:11:212167parcourir

Le fichier

 .env peut être personnalisé avec toute autre variable d'environnement valide et peut être obtenu en appelant env() ou $_SERVER ou $_ENV variable . Alors, comment env() se charge-t-il dans ces variables ? Dans le fichier supplier/laravel/lumen-framework/src/helpers.php de Lumen, nous pouvons trouver que la fonction env est définie comme ceci :

if (! function_exists('env')) {/**
     * Gets the value of an environment variable. Supports boolean, empty and null.
     *
     * @param  string  $key
     * @param  mixed   $default
     * @return mixed     */function env($key, $default = null)
    {$value = getenv($key);if ($value === false) {return value($default);
        }switch (strtolower($value)) {case 'true':case '(true)':return true;case 'false':case '(false)':return false;case 'empty':case '(empty)':return '';case 'null':case '(null)':return;
        }if (Str::startsWith($value, '"') && Str::endsWith($value, '"')) {return substr($value, 1, -1);
        }return $value;
    }
}

On peut voir que l'env la fonction est appelée. Utilisez getenv() pour lire les variables d'environnement. Nous savons également que getenv() est une API de fonction que PHP fournit nativement pour lire les variables globales $_SERVER ou $_ENV Quelles sont les variables d'environnement dans le. Fichier .env ? Peut-il être obtenu via getenv() ? vlucas/phpdotenv est le héros dans les coulisses. Vous pouvez le trouver sous le fournisseur de Lumen ou Laravel. Si vous souhaitez le télécharger séparément, allez ici : .

Dans le fichier vlucas/phpdotenv/src/Loader.php, on peut voir que .env est chargé dans un tableau, puis chaque ligne est traitée comme un setter et la méthode setEnvironmentVariable() est appelée :

/**
     * Load `.env` file in given directory.
     *
     * @return array     */public function load()
    {$this->ensureFileIsReadable();$filePath = $this->filePath;$lines = $this->readLinesFromFile($filePath);foreach ($lines as $line) {if (!$this->isComment($line) && $this->looksLikeSetter($line)) {$this->setEnvironmentVariable($line);}
        }return $lines;
    }/**
     * Read lines from the file, auto detecting line endings.
     *
     * @param string $filePath
     *
     * @return array     */protected function readLinesFromFile($filePath)
    {// Read file into an array of lines with auto-detected line endings$autodetect = ini_get('auto_detect_line_endings');ini_set('auto_detect_line_endings', '1');$lines = file($filePath, FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);ini_set('auto_detect_line_endings', $autodetect);return $lines;
    }

Loader::setEnvironmentVariable($name, $value = null) est défini comme suit :

/**
     * Set an environment variable.
     *
     * This is done using:
     * - putenv,
     * - $_ENV,
     * - $_SERVER.
     *
     * The environment variable value is stripped of single and double quotes.
     *
     * @param string      $name
     * @param string|null $value
     *
     * @return void     */public function setEnvironmentVariable($name, $value = null)
    {list($name, $value) = $this->normaliseEnvironmentVariable($name, $value);// Don't overwrite existing environment variables if we're immutable
        // Ruby's dotenv does this with `ENV[key] ||= value`.if ($this->immutable && $this->getEnvironmentVariable($name) !== null) {return;
        }// If PHP is running as an Apache module and an existing
        // Apache environment variable exists, overwrite itif (function_exists('apache_getenv') && function_exists('apache_setenv') && apache_getenv($name)) {
            apache_setenv($name, $value);
        }

        if (function_exists('putenv')) {
            putenv("$name=$value");
        }

        $_ENV[$name] = $value;
        $_SERVER[$name] = $value;}

 PHP dotenv Qu'est-ce qu'elle ?

Loads environment variables from .env to getenv(), $_ENV and $_SERVER automagically.

This is a PHP version of the original Ruby dotenv.

 Pourquoi .env ?

You should never store sensitive credentials in your code. Storing configuration in the environment is one of the tenets of a twelve-factor app. Anything that is likely to change between deployment environments – such as database credentials or credentials for 3rd party services – should be extracted from the code into environment variables.

Basically, a .env file is an easy way to load custom configuration variables that your application needs without having to modify .htaccess files or Apache/nginx virtual hosts. This means you won't have to edit any files outside the project, and all the environment variables are always set no matter how you run your project - Apache, Nginx, CLI, and even PHP 5.4's built-in webserver. It's WAY easier than all the other ways you know of to set environment variables, and you're going to love it.

. NO editing virtual hosts in Apache or Nginx
. NO adding php_value flags to .htaccess files
. EASY portability and sharing of required ENV values
. COMPATIBLE with PHP's built-in web server and CLI runner

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

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