Heim  >  Artikel  >  Backend-Entwicklung  >  Besprechen Sie die Wirksamkeit von Umgebungsvariablen in Lumen/Laravel-.env-Dateien

Besprechen Sie die Wirksamkeit von Umgebungsvariablen in Lumen/Laravel-.env-Dateien

巴扎黑
巴扎黑Original
2017-07-19 11:11:212171Durchsuche

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn