ホームページ  >  記事  >  バックエンド開発  >  Lumen/Laravel .env ファイルの環境変数の有効性について話し合う

Lumen/Laravel .env ファイルの環境変数の有効性について話し合う

巴扎黑
巴扎黑オリジナル
2017-07-19 11:11:212168ブラウズ

.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;}

なぜ.env?

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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。