設定環境變數配置的簡單方法.env
什麼是.env
.env
檔案位於專案根目錄下,作為全域性環境配置檔案。
通過 .env檔案 載入環境變數並且能夠自動的通過 getenv()
, $_ENV
和 $_SERVER
自動呼叫.
這是一個PHP版本 Ruby dotenv.
示例
// 執行環境名稱
APP_ENV=local
// 除錯模式,開發階段啟用,上線狀態禁用。
APP_DEBUG=true
// 敏感資訊加密金鑰,可使用 php artisan key:generate 重新生成。
APP_KEY=
// 專案根目錄
APP_URL=http://localhost
// 快取驅動,預設使用檔案作為快取。
CACHE_DRIVER=file
// 回話驅動,預設使用檔案儲存SESSION。
SESSION_DRIVER=file
// 佇列驅動,預設使用同步模式。
QUEUE_DRIVER=sync
// Redis高效能key-value資料庫,使用記憶體儲存,用於資料持久化。
REDIS_HOST=127.0.0.1
REDIS_PASSWORD=null
REDIS_PORT=6379
// 資料庫配置項
DB_HOST=127.0.0.1//資料庫主機名
DB_PORT=3306//資料庫埠
DB_DATABASE=homestead//資料庫名稱
DB_USERNAME=homestead//資料庫登入賬戶
DB_PASSWORD=secret//資料庫登入密碼
優勢
- 把.env加入GIT的
.gitignore
檔案中,可以避免.env
檔案中的敏感資訊洩露 - 可以不用修改Apache/nginx配置檔案,就可以設定環境變數
- 無需在
.htaccess
中新增 php_value 值 - 方便移植和共享 ENV 環境變數值
- 相容伺服器內建的伺服器和 CLI 執行器
使用 composer 安裝
curl -s http://getcomposer.org/installer | php
php composer.phar require vlucas/phpdotenv
使用方法
.env
檔案通常不包含在版本控制內, 它可能包含敏感的 API Key 或者 密碼. 所有需要環境變數定義(不敏感的定義)的專案都需要建立一個.env.example
檔案, 這個環境變數包含他們自己定義的環境變數或者聯合開發包含的環境變數. 專案合作開發者可以獨立的複製 .env.example 並且重新命名為 .env
, 並且修改為正確的本地環境配置, 儲存密碼key或者提供他們必要的值. 在這個使用方法中.env
檔案應該新增到.gitignore
檔案中並且永遠不會被專案的合作者簽入/簽出. 這個方法確保裡邊沒有敏感的 API Key 或者 密碼在版本控制中出現從而減少了安全風險. 並且開發環境中的配置永遠不會告知合作開發者.
新增配置到根目錄下的.env
檔案, 確保.env
檔案新增到.gitignore
從而不會簽入到 CVS
S3_BUCKET=dotenv
SECRET_KEY=souper_seekret_key
現在建立一個 .env.example 檔案, 並且簽入到專案中. 這裡配置和環境變數你需要設定的可以留空或者設定一些無關緊要的資料. 這個方法告知人們這些資料是必須的, 但是不會提供真正環境中的資料.
S3_BUCKET=devbucket
SECRET_KEY=abc123
你可以使用以下一行程式碼載入應用中的 .env 檔案:
Dotenv::load(__DIR__);
所有定義的變數都可以通過 getenv 方法訪問到, 並且也可以使用超全域性變數$_ENV
和 $_SERVER
訪問到.
$s3_bucket = getenv('S3_BUCKET');
$s3_bucket = $_ENV['S3_BUCKET'];
$s3_bucket = $_SERVER['S3_BUCKET'];
你同樣可以使用框架的 Request 類來訪問這些變數(如果你使用框架)
$s3_bucket = $request->env('S3_BUCKET');
$s3_bucket = $request->getEnv('S3_BUCKET');
$s3_bucket = $request->server->get('S3_BUCKET');
嵌入變數
在一個變數中嵌入一個環境變數是可以的, 這樣對於減少重複很有用.
使用 {$…}
來包裹環境變數 e.g.
BASE_DIR=/var/webroot/project-root
CACHE_DIR={$BASE_DIR}/cache
TMP_DIR={$BASE_DIR}/tmp
不可變
預設來說, Dotenv 認為環境變數是不變的. 這就是說一旦設定就不能變更.
你可以用以下函式將環境變數設定為可變的
Dotenv::makeMutable();
… 同樣你也可以使用以下函式讓其不再可變
Dotenv::makeImmutable();
要求變數必須設定
使用 Dotenv, 你可以指定這個 ENV 變數必須設定, 如沒有設定則會丟擲異常. 這對於人們是非常有用的, 如果程式缺少這個變數就不能執行.
使用以下語法:
Dotenv::required('DATABASE_DSN');
或者陣列來定義:
Dotenv::required(array('DB_HOST', 'DB_NAME', 'DB_USER', 'DB_PASS'));
如果 ENV 變數缺少, Dotenv 將丟擲一個 RuntimeException :
Required environment variable missing or value not allowed: 'DB_USER', 'DB_PASS'
允許的值
你可能看到了上邊的異常資訊, 你可以設定一個可能範圍值, 讓你的環境變數遵守這個規則
Dotenv::required('SESSION_STORE', array('Filesystem', 'Memcached'));
同樣的, 如果環境變數不在這個列表裡, 你會收到一個相似的異常資訊:
Required environment variable missing or value not allowed: 'SESSION_STORE'
註釋
可以使用 # 來註釋字元. E.g.
# this is a comment
VAR="value" # comment
VAR=value # comment
使用註釋
當一個開發者克隆你的程式碼庫. 他們會收到一個額外的手冊 一次性步驟 來手動的複製 .env.example 並且重新命名為 .env 並且追加上他們自己的值(或者從其他開發者哪裡獲取到其他敏感值).
phpdotenv 被用來建立開發者環境但是不應該用在生產環境下. 在生產環境下, 需要設定真實的變數而不必每次使用請求的時候都使用 .env 檔案進行過載.
這個可以通過自動化部署工具來實現, 例如: Vagrant, chef, Puppet, 或者手動的通過雲主機來實現, 例如: Pagodabox, Heroku.
參考
相關文章
- env 環境變數變數
- 環境變數的設定方法(轉)~變數
- npm scripts設定環境變數方法NPM變數
- win10環境變數怎麼設定 win10設定環境變數的方法Win10變數
- 設定環境變數變數
- RMAN環境變數的設定變數
- MAC 設定環境變數path的幾種方法Mac變數
- Linux 環境變數的設定、檢視方法Linux變數
- tomcat配置環境變數win10怎樣設定_win10如何設定tomcat配置環境變數Tomcat變數Win10
- export 設定環境變數Export變數
- oracle環境變數設定Oracle變數
- CentOS環境變數設定CentOS變數
- redhatas 設定環境變數Redhat變數
- rman 設定環境變數變數
- JAVA環境變數設定Java變數
- 設定環境變數(轉)變數
- process.env.NODE_ENV環境變數vue2.x變數Vue
- win10系統adb環境變數配置怎麼設定_win10系統adb環境變數配置的方法Win10變數
- Linux環境變數的設定和檢視方法Linux變數
- Laravel env 設定多環境切換Laravel
- java設定-JDK環境變數的設定(轉)JavaJDK變數
- Linux設定環境變數Linux變數
- c#環境變數設定C#變數
- XMLBeans 環境變數設定XMLBean變數
- Linux 環境變數設定Linux變數
- java JDK環境變數設定JavaJDK變數
- java jdk 設定環境變數JavaJDK變數
- ansible 設定環境變數變數
- ansible設定環境變數變數
- win10環境變數怎麼設定 win10環境變數更改的方法步驟Win10變數
- Mac 設定環境變數的位置、檢視和新增PATH環境變數Mac變數
- 配置環境變數變數
- Win10怎麼配置java環境變數 win10配置java環境變數的方法Win10Java變數
- Laravel 和 Lumen 中通過環境變數配置對應的 env 檔案Laravel變數
- 什麼是環境變數?Python中如何設定環境變數?變數Python
- linux 多工程的環境變數配置方法Linux變數
- java 環境變數的配置Java變數
- jdk環境變數的配置JDK變數