使用 PHP 更新 .env 值

Update .env value using PHP

我知道有些人可能认为这会导致安全问题。

但是...

我只想更新 2 个特定的标志,因为有时我想查看报告,有时又不想。如果我有办法更新这些标志——只要我想通过电子邮件或短信查看报告,我就可以通过 Apple iPhone 快捷方式连接一条路线来切换该功能。


我试过了

创建了一条路线

Route::get('/env/{flag}/{value}','GeneralController@envUpdate');

叫它

http://localhost/env/MAIL_REPORT/false

将触发此功能

public function setEnv($key, $val)
{
    $path = base_path('.env');

    if (file_exists($path)) {

        file_put_contents($path, str_replace(
            $key . '=' . env($key), $key . '=' . $val, file_get_contents($path)
        ));
    }
}

public function envUpdate($flag,$value)
{
    //dd($flag,$value);
    $allow_flags = ["MAIL_REPORT", "SMS_REPORT"];

    if (in_array($flag, $allow_flags))
    {
        setEnv((string)$flag, (string)$value);
        return env(env((string)$flag));
    }

} 

我一直收到 true 因为在我的 .env 中似乎没有更新

MAIL_REPORT=true

我想 MAIL_REPORT=false

注意:我已经运行:sudo chmod 777 .env

如何进一步调试它?

如果您需要更改环境变量,我建议您只更改 .env 文件并重新缓存您的配置(如果在生产环境中)。您当前的实施可能对安全问题非常敏感。

如果您确实想在 运行 时以编程方式更改环境变量,您始终可以使用 config() 辅助方法。

config(['mailing. reporting' => false]);

这也记录在 docs 中。

编辑

所以我认为您对环境变量的实现可能有点不正确。在您的应用程序中,环境变量本身不应在 运行 时间更改。唯一应该调用 env() 函数的地方是在配置文件中(位于 config 目录中)。所以你想要的是在你的 config/mailing.php 配置文件中创建一个新密钥。

'reporting' => env('MAIL_REPORT', false),

现在,无论何时您需要将此变量设置为 true,您都可以更改 .env 文件或使用第一个给定的示例 (config(['mailing. reporting' => false]);)。

docs 阅读更多相关信息。