2015-08-31 58 views

Trả lời

16

Không có cách nào được xây dựng để thực hiện điều đó. Nếu bạn thực sự muốn thay đổi nội dung của tệp .env, bạn sẽ phải sử dụng một số loại chuỗi thay thế kết hợp với các phương pháp ghi tệp của PHP. Đối với một số cảm hứng, bạn nên có một cái nhìn tại các lệnh key:generate: KeyGenerateCommand.php:

$path = base_path('.env'); 

if (file_exists($path)) { 
    file_put_contents($path, str_replace(
     'APP_KEY='.$this->laravel['config']['app.key'], 'APP_KEY='.$key, file_get_contents($path) 
    )); 
} 

Sau khi đường dẫn tập tin được xây dựng và tồn tại được chọn, lệnh đơn giản thay thế APP_KEY=[current app key] với APP_KEY=[new app key]. Bạn sẽ có thể thực hiện cùng chuỗi thay thế bằng các biến khác.
Cuối cùng nhưng không kém phần quan trọng, tôi chỉ muốn nói rằng có thể không phải là ý tưởng tốt nhất để cho phép người dùng thay đổi tệp .env. Đối với hầu hết các cài đặt tùy chỉnh, tôi khuyên bạn nên lưu trữ chúng trong cơ sở dữ liệu, tuy nhiên đây rõ ràng là một vấn đề nếu chính thiết lập đó là cần thiết để kết nối với cơ sở dữ liệu.

1

tôi đã cùng một vấn đề và đã tạo ra các chức năng dưới đây

public static function changeEnvironmentVariable($key,$value) 
{ 
    $path = base_path('.env'); 

    if(is_bool(env($key))) 
    { 
     $old = env($key)? 'true' : 'false'; 
    } 

    if (file_exists($path)) { 
     file_put_contents($path, str_replace(
      "$key=".$old, "$key=".$value, file_get_contents($path) 
     )); 
    } 
} 
+0

$ cũ có thể không xác định – sgotre

1

Tuy nhiên, thực hiện khác, trong trường hợp bạn có một cái gì đó như:

A = B #this là một mục hợp lệ

Trong tệp .env của bạn

public function updateEnv($data = array()) 
{ 
    if (!count($data)) { 
     return; 
    } 

    $pattern = '/([^\=]*)\=[^\n]*/'; 

    $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; 
    } 

    $newContent = implode('', $newLines); 
    file_put_contents($envFile, $newContent); 
} 
1

Cập nhật câu trả lời của Erick với xem xétGiá trịbao gồm các giá trị sting, bool và null.

public static function changeEnvironmentVariable($key,$value) 
{ 
    $path = base_path('.env'); 

    if(is_bool(env($key))) 
    { 
     $old = env($key)? 'true' : 'false'; 
    } 
    elseif(env($key)===null){ 
     $old = 'null'; 
    } 
    else{ 
     $old = env($key); 
    } 

    if (file_exists($path)) { 
     file_put_contents($path, str_replace(
      "$key=".$old, "$key=".$value, file_get_contents($path) 
     )); 
    } 
} 
Các vấn đề liên quan