.env ファイルは他の有効な環境変数を使用してカスタマイズでき、その変数は env() または $_SERVER または $_ENV を呼び出すことによって取得できます。では、env() はどのようにしてこれらの変数に読み込まれるのでしょうか? Lumen の Vendor/laravel/lumen-framework/src/helpers.php では、env 関数が次のように定義されていることがわかります:
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; } }
env 関数で getenv() が呼び出され、環境を読み取ることがわかります。変数。 getenv() は、$_SERVER または $_ENV グローバル変数を読み取るために PHP がネイティブに提供する関数 API であることもわかっています。なぜ getenv() を通じて .env ファイル内の環境変数を取得できるのでしょうか。 vlucas/phpdotenv は舞台裏の主役です。個別にダウンロードしたい場合は、Lumen または Laravel のベンダーから入手できます。
vlucas/phpdotenv/src/Loader.php ファイルでは、.env が配列にロードされ、各行がセッターとして扱われ、setEnvironmentVariable() メソッドが呼び出されることがわかります。
Loader::setEnvironmentVariable($name
,$value = null)は次のように定義されます: /**
* 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;
}
PHP dotenv彼女は何ですか?
/**
* 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;}
Loads environment variables from .env to getenv(), $_ENV and $_SERVER automagically.
This is a PHP version of the original Ruby dotenv.
以上がLumen/Laravel .env ファイルの環境変数の有効性について話し合うの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。