.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라는 것도 알고 있습니다. 왜 .env 파일의 환경 변수를 getenv()를 통해 얻을 수 있나요? vlucas/phpdotenv는 Lumen 또는 Laravel 공급업체에서 찾을 수 있습니다. 별도로 다운로드하려면 여기로 이동하세요.
vlucas/phpdotenv/src/Loader.php 파일에서 .env가 배열에 로드된 다음 각 줄이 setter로 처리되고 setEnvironmentVariable() 메서드가 호출되는 것을 볼 수 있습니다.
/** * 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)은 다음과 같이 정의됩니다.
/** * 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 tenv 그녀는 누구입니까?
Loads environment variables from .env to getenv(), $_ENV and $_SERVER automagically. This is a PHP version of the original Ruby dotenv.
왜 .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
위 내용은 Lumen/Laravel .env 파일의 환경 변수의 효율성에 대해 토론합니다.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!