1

我知道你们中的一些人可能认为这会导致安全问题。

但 ...

我只想更新2特定的标志,因为有时我想查看报告,有时我不想。如果我有办法更新这些标志——只要我想通过 EMAIL 或 SMS 查看报告,我就可以通过 Apple iPhone Shortcut 连接一个切换该功能的路由。


我试过了

创建了一条路线

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

如何进行并进一步调试呢?

4

1 回答 1

2

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

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

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

这也记录在docs中。

编辑

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

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

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

在docs中阅读有关它的更多信息。

于 2019-03-26T14:06:23.890 回答