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