Laravel5.4 不同環境下 env 檔案設定

lx1036發表於2017-06-07

Laravel5.4現在支援不同環境下env檔案設定(好像是L5.4最新支援的吧,記不清楚了,也有可能L5.2-5.3就已經支援了),可以針對不同環境(development, staging, production)設定env檔案為:

development: .env.development
staging: .env.staging
production: .env.production

根據不同環境伺服器設定系統變數(可根據phpinfo()檢視APP_ENV環境變數是否OK):

development: APP_ENV=development
staging: APP_ENV=staging
production: APP_ENV=production

這樣,專案根目錄下就會有根據不同環境對應的.env.xxx檔案,放入版本控制,本地的環境對應.env不需要放入版本控制。

原理可看laravel的原始碼:

namespace Illuminate\Foundation\Bootstrap;

use Dotenv\Dotenv;
use Dotenv\Exception\InvalidPathException;
use Symfony\Component\Console\Input\ArgvInput;
use Illuminate\Contracts\Foundation\Application;

class LoadEnvironmentVariables
{
    /**
     * Bootstrap the given application.
     *
     * @param  \Illuminate\Contracts\Foundation\Application  $app
     * @return void
     */
    public function bootstrap(Application $app)
    {
        if ($app->configurationIsCached()) {
            return;
        }

        $this->checkForSpecificEnvironmentFile($app);

        try {
            (new Dotenv($app->environmentPath(), $app->environmentFile()))->load();
        } catch (InvalidPathException $e) {
            //
        }
    }

    /**
     * Detect if a custom environment file matching the APP_ENV exists.
     *
     * @param  \Illuminate\Contracts\Foundation\Application  $app
     * @return void
     */
    protected function checkForSpecificEnvironmentFile($app)
    {
        if (php_sapi_name() == 'cli' && with($input = new ArgvInput)->hasParameterOption('--env')) {
            $this->setEnvironmentFilePath(
                $app, $app->environmentFile().'.'.$input->getParameterOption('--env')
            );
        }

        if (! env('APP_ENV')) {
            return;
        }

        $this->setEnvironmentFilePath(
            $app, $app->environmentFile().'.'.env('APP_ENV')
        );
    }

2019-02-19 更新

APP_ENV 可在 etc/nginx/fastcgi.conf 中設定就行,這樣 nginx 會把這些常量傳給 PHP 作為環境變數:

.
.
.
fastcgi_param  APP_ENV            staging;
本作品採用《CC 協議》,轉載必須註明作者和本文連結

相關文章