您好,登錄后才能下訂單哦!
本篇內容主要講解“laravel如何修改.env”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“laravel如何修改.env”吧!
laravel修改.env的方法:1、通過“base_path('.env');”獲取env文件的路徑;2、通過“function updateEnv($data = array()){}”聲明函數;3、通過“$pattern = '/([^\=]*)\=[^\n]*/';”正則匹配的方式來修改解析env文件即可。
Laravel 動態修改 env 環境變量的值!
引言
為了把配置參數獨立出來,用以區分開發環境,線上環境等功能, 或者手動切換緩存的驅動,隊列的驅動,郵件服務器地址,等等等等, 這些可以方便地標記。所以laravel使用 .env 文件包裹這些配置數據,也就是鍵值對。
學習時間
一般情況下,我們不允許修改env文件的內容,除非手動處理。可是在編程中難免遇到非修改不可的情況, 那么又該如何動態地操作env文件內的鍵值對呢?
假設對于系統使用 key:generate 生成的 APP_KEY 不安全,在做自動化部署,批量部署時有動態修改 APP_KEY 這個鍵的需求。該怎么來實現呢?
其實,env文件不過是一個文本文件,遵循 key=value 這樣的標準格式進行書寫,全程使用字符串匹配, 單行直到換行符停止。
那么修改 env 文件內容,無非就是找到相關的鍵,然后將值替換掉,如此而已。
下面給出第一個版本,也就是簡單粗暴的 file_put_contents,先獲取env文件的路徑:
$path = base_path('.env');
需要判斷文件是否存在:
if (file_exists($path)){
// 文件存在
}
文件存在則先讀出文件的所有內容到一個字符串變量內:
$origin = file_get_contents($path);
假設我們的新 APP_KEY 存在變量 $new_key 內,首先獲取原始的 APP_KEY的值:
$old_key = env('APP_KEY');
字符串操作當然要使用字符串替換函數直接匹配,我們使用 str_replace,env文件的數據量畢竟不大, 這么也也沒有太大性能的問題。
$result = str_replace('APP_KEY=' . $old_key, $new_key, $origin);
這樣$result內存儲的就是最新的env文件的值,接下來寫入env文件就行了:
file_put_contents($result);
默認是覆寫,所以執行完程序,env文件就是最新的動態修改的數據了。
深入一步
上面的代碼還是有瑕疵的,因為對于錯誤故障處理基本上沒有,這很容易造成錯誤。 另外對于env這么重要的文件操作,直接使用字符串替換,整個文件的讀和覆寫, 本身的風險就非常高。
如何改造我們的操作方式,使其更為安全呢?我們需要兼容性更好的代碼。本節我們嘗試使用正則匹配的方式, 來解析env文件,并逐行讀取,逐行操作,逐行判斷, 對于存在的鍵值,進行覆蓋;對于不存在的,則進行創建。 這樣就可以兼容新建和更新兩種功能,且支持的鍵值更為靈活。
封裝為助手函數,假設傳入的參數為數組,且是關聯數組。聲明函數如下:
function updateEnv($data = array()){}
函數體內書寫邏輯,首先非空判斷:
if (! count($data)) {return;}
如果不是關聯數組,也同樣不接受,因為env文件必須明確指定鍵和值。 關聯數組只用判斷數組的鍵與自動序列化的鍵不同即可:
if (array_keys($data) === range(0, count($data) - 1)) {return;}
準備匹配模式:
$pattern = '/([^\=]*)\=[^\n]*/';
這就是env文件書寫的格式。上一節我們已經介紹過了。我們把舊的env文件讀入一個數組,并聲明新的數組,存儲最新的配置文件數據:
$envFile = base_path() . '/.env';
$lines = file($envFile);
$newLines = [];
然后遍歷舊的文件數據,逐行解析:
foreach ($lines as $line) {
preg_match($pattern, $line, $matches);
if (!count($matches)) {
$newLines[] = $line;
continue;
}
if (!key_exists(trim($matches[1]), $data)) {
$newLines[] = $line;
continue;
}
$line = trim($matches[1]) . "={$data[trim($matches[1])]}\n";
$newLines[] = $line;
}
上面只是一個大致的處理流程,這個解析過程,你可以獨立為自定義函數,或者其他解析引擎,具有通用性。
最后把解析完的新數據,完整寫入env文件內:
$newContent = implode('', $newLines);
file_put_contents($envFile, $newContent);
到此,相信大家對“laravel如何修改.env”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。