Heim > Artikel > Backend-Entwicklung > Besprechen Sie die Wirksamkeit von Umgebungsvariablen in Lumen/Laravel-.env-Dateien
Die Datei
.env kann mit allen anderen gültigen Umgebungsvariablen angepasst werden und kann durch Aufruf von env() oder $_SERVER oder $_ENV abgerufen werden . Wie wird env() in diese Variablen geladen? In Lumens Vendor/laravel/lumen-framework/src/helpers.php finden wir, dass die env-Funktion wie folgt definiert ist:
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; } }
Es ist ersichtlich, dass die env Die Funktion heißt. Verwenden Sie getenv(), um Umgebungsvariablen zu lesen. Wir wissen auch, dass getenv() eine Funktions-API ist, die PHP nativ bereitstellt, um $_SERVER oder $_ENV globale Variablen zu lesen .env-Datei? Kann sie über getenv() abgerufen werden? vlucas/phpdotenv ist der Held hinter den Kulissen. Sie finden es unter dem Anbieter von Lumen oder Laravel. Wenn Sie es separat herunterladen möchten, gehen Sie hier.
In der Datei vlucas/phpdotenv/src/Loader.php können wir sehen, dass .env in ein Array geladen wird und dann jede Zeile als Setter behandelt wird und die Methode setEnvironmentVariable() aufgerufen wird:
/** * 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) ist wie folgt definiert:
/** * 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 Was ist sie ?
Loads environment variables from .env to getenv(), $_ENV and $_SERVER automagically. This is a PHP version of the original Ruby dotenv.
Warum .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
Das obige ist der detaillierte Inhalt vonBesprechen Sie die Wirksamkeit von Umgebungsvariablen in Lumen/Laravel-.env-Dateien. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!