如何在 Laravel 中動態更改 .env 檔案中的變數?


.env 檔案包含以下內容:

APP_NAME=Laravel
APP_ENV=local
APP_KEY=base64:BUdhVZjOEzjFihHKgt1Cc+gkQKPoA4iH98p5JwcuNho=
APP_DEBUG=true
APP_URL=https://

LOG_CHANNEL=stack
LOG_DEPRECATIONS_CHANNEL=null
LOG_LEVEL=debug

DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=test
DB_USERNAME=root
DB_PASSWORD=

BROADCAST_DRIVER=log
CACHE_DRIVER=file
FILESYSTEM_DRIVER=public
QUEUE_CONNECTION=sync
SESSION_DRIVER=file
SESSION_LIFETIME=120

MEMCACHED_HOST=127.0.0.1
REDIS_HOST=127.0.0.1
REDIS_PASSWORD=null
REDIS_PORT=6379
SERVER_ADDR = 127.0.0.1

MAIL_MAILER=smtp
MAIL_HOST=mailhog
MAIL_PORT=1025
MAIL_USERNAME=null
MAIL_PASSWORD=null
MAIL_ENCRYPTION=null
MAIL_FROM_ADDRESS=null
MAIL_FROM_NAME="${APP_NAME}"

AWS_ACCESS_KEY_ID=
AWS_SECRET_ACCESS_KEY=
AWS_DEFAULT_REGION=us-east-1
AWS_BUCKET=
AWS_USE_PATH_STYLE_ENDPOINT=false

PUSHER_APP_ID=
PUSHER_APP_KEY=
PUSHER_APP_SECRET=
PUSHER_APP_CLUSTER=mt1

MIX_PUSHER_APP_KEY="${PUSHER_APP_KEY}"
MIX_PUSHER_APP_CLUSTER="${PUSHER_APP_CLUSTER}"

此檔案在您進行 Laravel 安裝時生成。它包含所有常見的環境變數,例如 APP_NAME、APP_URL、您的資料庫連線等。

上述環境變數在 config/ 資料夾內使用,該資料夾包含所有配置檔案。config/ 資料夾的結構如下:

當您在本地、暫存環境和生產環境中執行應用程式時,.env 檔案中的值將有所不同。由於 .env 源內容因工作環境而異,因此最好不要將該檔案提交到您的儲存庫。

要獲取您在應用程式中工作的環境,您可以使用 App** Facade 類:use Illuminate\Support\Facades\App;

示例 1

使用 App::environment() 獲取環境型別

use Illuminate\Support\Facades\App; $environment = App::environment(); echo $environment;

輸出

輸出將是:

local

環境變數 APP_DEBUG 在**config/app.php** 中讀取。設定為 true 時,它將在螢幕上顯示有關錯誤訊息的資訊。該值從 config/app.php 內的 .env 檔案中獲取。在您本地工作時應將其設定為 true,在生產環境中應將其設定為 false。

現在讓我們瞭解如何動態更改環境變數。沒有直接的方法來更改它,您可以使用以下方法之一:

示例 2

動態更改環境變數

$path = base_path('.env'); $test = file_get_contents($path); if (file_exists($path)) { file_put_contents($path, str_replace('APP_ENV=local', 'APP_ENV=production', $test)); }

輸出

在上面的示例中,我們獲取 .env 檔案的檔案路徑。稍後將變數 APP_ENV=local 替換為 APP_ENV=production。現在,當您檢查 .env 檔案時,您將獲得以下內容:

APP_NAME=Laravel
APP_ENV=production
APP_KEY=base64:BUdhVZjOEzjFihHKgt1Cc+gkQKPoA4iH98p5JwcuNho=
APP_DEBUG=true
APP_URL=https://

示例 3

使用 env() 獲取環境變數。

env() 方法可幫助您獲取在 .env 檔案中設定的環境變數的值。您可以將變數名稱傳遞給 env() 方法,它將返回在 .env 檔案中設定的值。

echo env('APP_URL'); echo "<br/>"; echo env('APP_ENV'); echo "<br/>"; echo env('APP_KEY');

輸出

以上程式碼的輸出為:

https:// 
local 
base64:BUdhVZjOEzjFihHKgt1Cc+gkQKPoA4iH98p5JwcuNho=

示例 4

您還可以使用 $_ENV 全域性變數來獲取所有環境變數及其值。

print_r($_ENV);

輸出

以上程式碼的輸出為:

Array(
   [APP_NAME] => Laravel
   [APP_KEY] => base64:BUdhVZjOEzjFihHKgt1Cc+gkQKPoA4iH98p5JwcuNho=
   [APP_DEBUG] => true
   [APP_URL] => https://
   [LOG_CHANNEL] => stack
   [LOG_DEPRECATIONS_CHANNEL] => null
   [LOG_LEVEL] => debug
   [DB_CONNECTION] => mysql
   [DB_HOST] => 127.0.0.1
   [DB_PORT] => 3306
   [DB_DATABASE] => test
   [DB_USERNAME] => root
   [DB_PASSWORD] =>
   [BROADCAST_DRIVER] => log
   [CACHE_DRIVER] => file
   [FILESYSTEM_DRIVER] => public
   [QUEUE_CONNECTION] => sync
   [SESSION_DRIVER] => file
   [SESSION_LIFETIME] => 120
   [MEMCACHED_HOST] => 127.0.0.1
   [REDIS_HOST] => 127.0.0.1
   [REDIS_PASSWORD] => null
   [REDIS_PORT] => 6379
   [SERVER_ADDR] => 127.0.0.1
   [MAIL_MAILER] => smtp
   [MAIL_HOST] => mailhog
   [MAIL_PORT] => 1025
   [MAIL_USERNAME] => null
   [MAIL_PASSWORD] => null
   [MAIL_ENCRYPTION] => null
   [MAIL_FROM_ADDRESS] => null
   [MAIL_FROM_NAME] => Laravel
   [AWS_ACCESS_KEY_ID] =>
   [AWS_SECRET_ACCESS_KEY] =>
   [AWS_DEFAULT_REGION] => us-east-1
   [AWS_BUCKET] =>
   [AWS_USE_PATH_STYLE_ENDPOINT] => false
   [PUSHER_APP_ID] =>
   [PUSHER_APP_KEY] =>
   [PUSHER_APP_SECRET] =>
   [PUSHER_APP_CLUSTER] => mt1
   [MIX_PUSHER_APP_KEY] =>
   [MIX_PUSHER_APP_CLUSTER] => mt1
)

更新於: 2022-08-30

9K+ 瀏覽量

開啟您的 職業生涯

透過完成課程獲得認證

開始學習
廣告