摘要:原文地址通過加載環(huán)境變量并且能夠自動的通過和自動調(diào)用這是一個版本為什么是你不能在代碼中存儲任何的敏感賬號數(shù)據(jù)存儲在環(huán)境中存儲配置是的一項規(guī)則在部署中可能變化的所有的內(nèi)容諸如數(shù)據(jù)庫認(rèn)證或者第三方服務(wù)的認(rèn)證應(yīng)該從代碼中剝離出來也就是環(huán)境變量的
原文地址:PHP dotenv
通過 .env 加載環(huán)境變量并且能夠自動的通過 getenv(), $_ENV 和 $_SERVER 自動調(diào)用.
這是一個PHP版本 Ruby dotenv.
為什么是 .env?你不能在代碼中存儲任何的 敏感/賬號 數(shù)據(jù). 存儲 在環(huán)境中存儲配置 是 12-factors的一項規(guī)則. 在部署中可能變化的所有的內(nèi)容 – 諸如數(shù)據(jù)庫認(rèn)證或者第三方服務(wù)的認(rèn)證應(yīng)該從代碼中剝離出來.也就是環(huán)境變量的概念.
廣義上來說, 一個 .env 文件是加載自定義配置的一個簡單的方法, 這樣你的應(yīng)用不需要修改 .htaccess 文件或者 Apache/nginx 虛擬主機(jī). 這意味著你不需要編輯項目之外的任何文件,并且所有的環(huán)境變量都配置完整了, 無論你運行在 Apache, Nginx, CLI 還是 PHP 5.4 上內(nèi)建的web服務(wù)器上. 這是一個所知的設(shè)置環(huán)境變量最簡單的方法, 你會喜歡上它的.
無需在 Apache 或者 Nginx上額外配置虛擬主機(jī)配置
無需在 .htaccess 中添加 php_value 值
方便移植和共享 ENV 環(huán)境變量值
兼容服務(wù)器內(nèi)置的服務(wù)器和 CLI 運行器
使用 composer 安裝curl -s http://getcomposer.org/installer | php php composer.phar require vlucas/phpdotenv使用方法
.env 文件通常不包含在版本控制內(nèi), 它可能包含敏感的 API Key 或者 密碼. 所有需要環(huán)境變量定義(不敏感的定義)的項目都需要創(chuàng)建一個 .env.example 文件, 這個環(huán)境變量包含他們自己定義的環(huán)境變量或者聯(lián)合開發(fā)包含的環(huán)境變量. 項目合作開發(fā)者可以獨立的復(fù)制 .env.example 并且重命名為 .env , 并且修改為正確的本地環(huán)境配置, 存儲密碼key或者提供他們必要的值. 在這個使用方法中 .env 文件應(yīng)該添加到 .gitignore 文件中并且永遠(yuǎn)不會被項目的合作者簽入/簽出. 這個方法確保里邊沒有敏感的 API Key 或者 密碼在版本控制中出現(xiàn)從而減少了安全風(fēng)險. 并且開發(fā)環(huán)境中的配置永遠(yuǎn)不會告知合作開發(fā)者.
添加配置到根目錄下的 .env 文件, 確保 .env 文件添加到 .gitignore 從而不會簽入到 CVS
S3_BUCKET=dotenv SECRET_KEY=souper_seekret_key
現(xiàn)在創(chuàng)建一個 .env.example 文件, 并且簽入到項目中. 這里配置和環(huán)境變量你需要設(shè)置的可以留空或者設(shè)置一些無關(guān)緊要的數(shù)據(jù). 這個方法告知人們這些數(shù)據(jù)是必須的, 但是不會提供真正環(huán)境中的數(shù)據(jù).
S3_BUCKET=devbucket SECRET_KEY=abc123
你可以使用以下一行代碼加載應(yīng)用中的 .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");嵌入變量
在一個變量中嵌入一個環(huán)境變量是可以的, 這樣對于減少重復(fù)很有用.
使用 {$…} 來包裹環(huán)境變量 e.g.
BASE_DIR=/var/webroot/project-root CACHE_DIR={$BASE_DIR}/cache TMP_DIR={$BASE_DIR}/tmp不可變
默認(rèn)來說, Dotenv 認(rèn)為環(huán)境變量是不變的. 這就是說一旦設(shè)置就不能變更.
你可以用以下函數(shù)將環(huán)境變量設(shè)置為可變的
Dotenv::makeMutable();
… 同樣你也可以使用以下函數(shù)讓其不再可變
Dotenv::makeImmutable();要求變量必須設(shè)置
使用 Dotenv, 你可以指定這個 ENV 變量必須設(shè)置, 如沒有設(shè)置則會拋出異常. 這對于人們是非常有用的, 如果程序缺少這個變量就不能運行.
使用以下語法:
Dotenv::required("DATABASE_DSN");
或者數(shù)組來定義:
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"允許的值
你可能看到了上邊的異常信息, 你可以設(shè)定一個可能范圍值, 讓你的環(huán)境變量遵守這個規(guī)則
Dotenv::required("SESSION_STORE", array("Filesystem", "Memcached"));
同樣的, 如果環(huán)境變量不在這個列表里, 你會收到一個相似的異常信息:
Required environment variable missing or value not allowed: "SESSION_STORE"注釋
可以使用 # 來注釋字符. E.g.
# this is a comment VAR="value" # comment VAR=value # comment使用注釋
當(dāng)一個開發(fā)者克隆你的代碼庫. 他們會收到一個額外的手冊 一次性步驟 來手動的復(fù)制 .env.example 并且重命名為 .env 并且追加上他們自己的值(或者從其他開發(fā)者哪里獲取到其他敏感值).
phpdotenv 被用來建立開發(fā)者環(huán)境但是不應(yīng)該用在生產(chǎn)環(huán)境下. 在生產(chǎn)環(huán)境下, 需要設(shè)置真實的變量而不必每次使用請求的時候都使用 .env 文件進(jìn)行重載.
這個可以通過自動化部署工具來實現(xiàn), 例如: Vagrant, chef, Puppet, 或者手動的通過云主機(jī)來實現(xiàn), 例如: Pagodabox, Heroku.
貢獻(xiàn)Fork it
創(chuàng)建分支(git checkout -b my-new-feature)
改動
運行測試, 如果需要, 添加新配置 (phpunit)
提交 (git commit -am "Added some feature")
推送到分支 (git push origin my-new-feature)
創(chuàng)建新的拉取請求
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/25734.html
摘要:批量生成優(yōu)惠券碼并寫入數(shù)據(jù)表說明這篇文章主要講的是個人工作中遇到的解決問題的方法而非程序?qū)懙亩鄡?yōu)美。 python 批量生成優(yōu)惠券碼并寫入數(shù)據(jù)表 說明:這篇文章主要講的是個人工作中遇到的解決問題的方法,而非程序?qū)懙亩鄡?yōu)美。要完善的地方太多了,大家嘴下留情 why do this 為什么要這么做?優(yōu)惠券碼直接在用的時候用程序直接生成不就OK了嗎? 好,那么問題來了,我們的系統(tǒng)需要一次性發(fā)...
摘要:批量生成優(yōu)惠券碼并寫入數(shù)據(jù)表說明這篇文章主要講的是個人工作中遇到的解決問題的方法而非程序?qū)懙亩鄡?yōu)美。 python 批量生成優(yōu)惠券碼并寫入數(shù)據(jù)表 說明:這篇文章主要講的是個人工作中遇到的解決問題的方法,而非程序?qū)懙亩鄡?yōu)美。要完善的地方太多了,大家嘴下留情 why do this 為什么要這么做?優(yōu)惠券碼直接在用的時候用程序直接生成不就OK了嗎? 好,那么問題來了,我們的系統(tǒng)需要一次性發(fā)...
首先composer安裝 composer require vlucas/phpdotenv 接著看phpdotenv官方文檔 https://packagist.org/package... 示例 $dotenv = DotenvDotenv::create(__DIR__, .env); $my_env = $dotenv->load(); var_dump($my_env);
摘要:前言作為一個愛好者讓我寫我本來是拒絕的,但是呢,拒絕了誰給你工資啊那怎么辦呢,既然是基于的組件化開發(fā)的,那么能不能把中的功能引入到中呢環(huán)境問題測試版和正式版的數(shù)據(jù)庫一般是不同的那么如何方便的切換呢之前我才用的方法是看當(dāng)前運行的文件夾是哪個就 前言 作為一個 laravel 愛好者讓我寫 tp3.2 我本來是拒絕的,但是呢,拒絕了誰給你工資啊那怎么辦呢,既然 laravel 是基于 co...
摘要:發(fā)布于年月,從那時起大約每六個月會發(fā)布一次的新版本。將會支持相對較新的來管理項目中的環(huán)境文件。棄用和輔助函數(shù)所有的和全局輔助函數(shù)都已棄用,將在中刪除。將返回更干凈的相同值。和通知和通知已從主項目中刪除,并提取到第三方軟件包中。 showImg(https://segmentfault.com/img/remote/1460000018269419?w=585&h=400); 無論是從零...
閱讀 1794·2023-04-25 22:42
閱讀 2218·2021-09-22 15:16
閱讀 3495·2021-08-30 09:44
閱讀 493·2019-08-29 16:44
閱讀 3316·2019-08-29 16:20
閱讀 2521·2019-08-29 16:12
閱讀 3395·2019-08-29 16:07
閱讀 673·2019-08-29 15:08