4

在 Laravel 中,有时我使用 sed 更新环境值:

sed -i '/^MAIL_DRIVER=/s/=.*/=log/' .env

任何人都可以建议和替代使用 PHP 来执行此操作吗?

更新:我使用 Laravel/dotenv .env 文件作为示例来为问题提供一些上下文,但我对如何以编程方式更改环境变量不感兴趣,我感兴趣的是如何使用 php 文件操作函数执行 sed “like”操作或如果存在一些图书馆来做到这一点。我也知道我可以使用 system o passthru 函数,这就是我已经在做的我只是好奇如何使用 PHP 以这种方式操作文件

4

2 回答 2

1

虽然 Laravel 使用dotenv库进行读取,但它无法以编程方式更新.env文件。但是,您可以使用 更新配置值 preg_replace。这是一个单行解决方案:

file_put_contents(base_path('.env'), preg_replace("/(MAIL_DRIVER)=(.*)/", "$1=log", file_get_contents(base_path('.env'))));

这也是扩展为多行并解释的解决方案:

// Read the .env file contents
$env = file_get_contents(base_path('.env'));

// Replace the value using regex matching
$env = preg_replace("/(MAIL_DRIVER)=(.*)/", "$1=log", $env);

// Write the updated contents to the file
file_put_contents(base_path('.env'), $env);
于 2016-02-10T13:49:24.817 回答
0

您不需要系统调用来实现这一点。你应该使用putenv()

putenv('MAIL_DRIVER=/log');

于 2016-02-10T11:36:17.013 回答