ホームページ  >  記事  >  PHPフレームワーク  >  laravelで.envを変更する方法

laravelで.envを変更する方法

藏色散人
藏色散人オリジナル
2022-12-12 10:18:041938ブラウズ

laravel で .env を変更する方法: 1. "base_path('.env');" を通じて env ファイルのパスを取得します; 2. "function updateEnv($data = array())" を通じて宣言します{}" 関数; 3. "$pattern = '/([^\=]*)\=[^\n]*/';" 正規一致により、env ファイルを変更して解析します。

laravelで.envを変更する方法

このチュートリアルの動作環境: Windows 7 システム、Laravel バージョン 5.7、Dell G3 コンピューター。

laravel で .env を変更するにはどうすればよいですか?

Laravel は env 環境変数の値を動的に変更します。

はじめに

開発環境、オンライン環境、その他の機能を区別するために設定パラメータを分離したり、キャッシュドライバー、キュードライバー、メールサーバーアドレスなどを手動で切り替えるため. など、これらに簡単にラベルを付けることができます。したがって、laravel は .env ファイルを使用して、キーと値のペアであるこれらの構成データをラップします。

学習時間

通常の状況では、手動で処理しない限り、env ファイルの内容を変更することはできません。しかし、プログラミングでは変更が必要な状況が避けられないため、env ファイル内のキーと値のペアを動的に操作するにはどうすればよいでしょうか?

key:generate を使用してシステムによって生成された APP_KEY が安全ではないことを想定し、自動デプロイメントおよびバッチ デプロイメントを実行する場合、APP_KEY キーを動的に変更する必要があります。これを達成するにはどうすればよいでしょうか?

実際、env ファイルは単なるテキスト ファイルであり、key=value などの標準形式で記述され、改行文字が終わるまでは 1 行で文字列マッチングが使用されます。

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');

String もちろん、文字列置換関数を使って直接照合する必要があるので、str_replaceを使用しますが、結局、envファイルのデータ量は多くないので、パフォーマンスに大きな問題はありません。

$result = str_replace('APP_KEY=' . $old_key, $new_key, $origin);

このように、最新のenvファイルの値が$resultに格納されるので、後はenvファイルを書き込むだけです:

file_put_contents($result);

デフォルトでは上書きなので、プログラム実行後、 env ファイルは動的に変更された最新のデータになります。

さらに詳しく見る

基本的にエラー処理がないため、簡単にエラーが発生する可能性があるため、上記のコードにはまだ欠陥があります。さらに、env と同じくらい重要なファイル操作の場合、文字列置換を直接使用してファイル全体を読み取り、上書きすることは本質的に危険です。

運用方法をより安全なものに変えるにはどうすればよいでしょうか?もっと互換性のあるコードが必要です。このセクションでは、env ファイルを解析し、1 行ずつ読み取り、1 行ずつ操作し、1 行ずつ判断するために正規のマッチングを使用してみます。キー値が存在する場合は上書きされ、存在しない場合は上書きされます。存在すれば作成されます。これにより、新規機能と更新機能の両方に対応でき、サポートされるキー値がより柔軟になります。

渡されるパラメーターが配列および連想配列であると想定して、ヘルパー関数としてカプセル化されます。関数を次のように宣言します。

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);

この時点で、env ファイルの更新操作は完了です。

最後に書きました

この記事では、env グローバル設定ファイルのデータを動的に作成および更新する機能をプログラム内で 2 つの方法で実装しています。2 番目の方法の方がフォールト トレランスと汎用性が優れています。拡張性が高いのでおすすめです。最初のアプローチにはエラー処理がないため、運用環境ではほとんど使用できません。誰もがその考えを知ってくれれば素晴らしいでしょう。

推奨学習: 「laravel ビデオ チュートリアル

以上がlaravelで.envを変更する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。