Rumah > Artikel > rangka kerja php > Bagaimana untuk mengubah suai .env dalam laravel
Cara mengubah suai .env dalam laravel: 1. Dapatkan laluan fail env melalui "base_path('.env');"; 2. Deklarasikan melalui "function updateEnv($data = array()) {}" Fungsi; 3. Ubah suai dan huraikan fail env melalui "$pattern = '/([^=]*)=[^n]*/';" padanan biasa.
Persekitaran pengendalian tutorial ini: sistem Windows 7, Laravel versi 5.7, komputer Dell G3.
Bagaimana untuk mengubah suai .env dalam laravel?
Laravel mengubah suai nilai pembolehubah persekitaran env secara dinamik!
Pengenalan
Untuk memisahkan parameter konfigurasi untuk membezakan persekitaran pembangunan, persekitaran dalam talian dan fungsi lain, atau untuk menukar pemacu cache, pemacu baris gilir dan alamat pelayan mel secara manual , Dsb., dsb., ini boleh dilabelkan dengan mudah. Jadi laravel menggunakan fail .env untuk membungkus data konfigurasi ini, yang merupakan pasangan nilai kunci.
Masa pembelajaran
Dalam keadaan biasa, kami tidak dibenarkan mengubah suai kandungan fail env melainkan ia diproses secara manual. Walau bagaimanapun, dalam pengaturcaraan, tidak dapat dielakkan untuk menghadapi situasi yang mesti diubah suai Jadi bagaimana untuk mengendalikan pasangan nilai kunci secara dinamik dalam fail env?
Andaikan APP_KEY yang dijana oleh sistem menggunakan key:generate tidak selamat Apabila melakukan penempatan automatik dan penggunaan kelompok, terdapat keperluan untuk mengubah suai kunci APP_KEY secara dinamik. Bagaimana untuk mencapai ini?
Malah, fail env hanyalah fail teks, ditulis dalam format standard seperti key=value, menggunakan padanan rentetan di seluruh, dengan satu baris sehingga aksara baris baharu berhenti.
Kemudian mengubah suai kandungan fail env tidak lebih daripada mencari kunci yang berkaitan dan kemudian menggantikan nilai, itu sahaja.
Versi pertama diberikan di bawah, iaitu file_put_contents yang ringkas dan kasar, mula-mula dapatkan laluan fail env:
$path = base_path('.env');
Anda perlu menentukan sama ada fail itu wujud:
if (file_exists($path)){ // 文件存在 }
Jika fail wujud, mula-mula baca semua kandungan fail ke dalam pembolehubah rentetan:
$origin = file_get_contents($path);
Andaikan APP_KEY baharu kami wujud dalam pembolehubah $new_key, mula-mula dapatkan yang asal Nilai APP_KEY:
$old_key = env('APP_KEY');
Sudah tentu, operasi rentetan memerlukan pemadanan langsung menggunakan fungsi penggantian rentetan Kami menggunakan str_replace Jumlah data dalam fail env tidaklah besar, jadi tiada prestasi yang besar masalah.
$result = str_replace('APP_KEY=' . $old_key, $new_key, $origin);
Dengan cara ini, nilai fail env terkini disimpan dalam $result Kemudian tulis sahaja fail env:
file_put_contents($result);
Lalainya ialah untuk menulis ganti, jadi. program dilaksanakan , fail env ialah data yang diubah suai secara dinamik.
Pergi lebih dalam
Kod di atas masih cacat, kerana pada dasarnya tiada pengendalian ralat, yang boleh menyebabkan ralat dengan mudah. Di samping itu, untuk operasi fail yang sama pentingnya dengan env, secara langsung menggunakan penggantian rentetan untuk membaca dan menulis ganti keseluruhan fail sememangnya berisiko.
Bagaimanakah kita boleh mengubah cara kita beroperasi untuk menjadikannya lebih selamat? Kami memerlukan kod yang lebih serasi. Dalam bahagian ini, kami cuba menggunakan pemadanan biasa untuk menghuraikan fail env, membacanya baris demi baris, mengendalikannya baris demi baris dan menilainya jika nilai kunci wujud, ia akan ditimpa jika tidak wujud, ia akan dicipta. Dengan cara ini, ia boleh serasi dengan kedua-dua fungsi baharu dan kemas kini, dan nilai kunci yang disokong adalah lebih fleksibel.
dirangkumkan sebagai fungsi pembantu, dengan mengandaikan bahawa parameter yang dihantar adalah tatasusunan dan ia adalah tatasusunan bersekutu. Isytihar fungsi seperti berikut:
function updateEnv($data = array()){}
Tulis logik dalam badan fungsi, semak dahulu jika ia tidak kosong:
if (! count($data)) {return;}
Jika ia bukan tatasusunan bersekutu, ia juga tidak diterima, kerana fail env mesti menyatakan dengan jelas kunci dan nilai. Untuk tatasusunan bersekutu, anda hanya perlu menentukan bahawa kunci tatasusunan berbeza daripada kunci bersiri secara automatik:
if (array_keys($data) === range(0, count($data) - 1)) {return;}
Sediakan corak yang sepadan:
$pattern = '/([^\=]*)\=[^\n]*/';
Ini ialah format untuk menulis fail env. Kami telah memperkenalkannya di bahagian sebelumnya. Kami membaca fail env lama ke dalam tatasusunan dan mengisytiharkan tatasusunan baharu untuk menyimpan data fail konfigurasi terkini:
$envFile = base_path() . '/.env'; $lines = file($envFile); $newLines = [];
Kemudian melintasi data fail lama dan menghuraikannya baris demi baris:
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; }
Perkara di atas hanyalah aliran pemprosesan kasar Proses penghuraian ini boleh disesuaikan secara bebas sebagai fungsi tersuai atau enjin penghuraian lain, jadi ia bersifat universal.
Akhir sekali, tulis data yang dihuraikan baharu sepenuhnya ke dalam fail env:
$newContent = implode('', $newLines); file_put_contents($envFile, $newContent);
Pada ketika ini, operasi kemas kini fail env selesai.
Ditulis pada penghujung
Artikel ini melaksanakan fungsi mencipta dan mengemas kini data fail konfigurasi global secara dinamik dalam program dalam dua cara Kaedah kedua adalah lebih tahan terhadap kesalahan dan serba boleh. mempunyai kebolehskalaan yang kuat, jadi kami mengesyorkannya. Pendekatan pertama tidak mempunyai pengendalian ralat dan hampir tidak boleh digunakan dalam persekitaran pengeluaran. Alangkah baiknya jika semua orang tahu idea itu.
Pembelajaran yang disyorkan: "tutorial video laravel"
Atas ialah kandungan terperinci Bagaimana untuk mengubah suai .env dalam laravel. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!