【问题标题】:Update .env value using PHP使用 PHP 更新 .env 值
【发布时间】:2019-08-16 22:41:17
【问题描述】:

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

但是……

我只想更新2 特定标志,因为有时我想查看报告,而有时我不想。如果我有办法更新这些标志——只要我想通过 EMAIL 或 SMS 查看报告,我就可以通过 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

如何进一步调试?

【问题讨论】:

  • 有两个嵌套函数定义是否正常?此外,在 Laravel(和 Symfony)中,读取 .env 并将变量设置为环境变量,但调用 setEnv() 不会更新文件。您可能必须将文件解析为文本或使用执行此操作的库。
  • 好的,我把函数拉出来再试一次。
  • 为什么要以编程方式更新.env 文件?这是非常糟糕的做法!
  • 我只想更新特定的标志,因为有时我想看报告,有时我不想。如果我有办法做到这一点,我可以连接一条触发该功能的路线 - 每当我想通过 EMAIL 查看报告时,通过 iPhone Apple Shortcut。
  • @Jerodev 我只会使用 2 个标志来做到这一点。我将检查该功能。一百万年后我永远不会打开这条通往世界的道路,但这是我的下一步。

标签: php laravel laravel-5 environment-variables laravel-5.8


【解决方案1】:

如果您需要更改环境变量,我建议您更改 .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了解更多信息。

【讨论】:

  • 为什么是mailing.report?我的国旗拼写像这样MAIL_REPORT
  • 这只是对您的配置外观的猜测。你在哪里使用 MAIL_REPORT 环境变量?我想在你的一个配置文件中?
  • 我试过这个:i.imgur.com/QxPIEHb.png,我仍然是真的。我应该看到它更新为false
  • 我的回答将完全满足您的需求。但是,您需要改变思维方式?。您可以阅读更多关于它的信息here 或阅读this blog post
  • @kyo 像 Dees 提到的那样更改 .env 是个坏主意,如果您需要类似的行为,请按照他也提到的那样更改 mail.php,这是最好的解决方案。在 stackoverflow 中,你应该给出一个准确和正确的答案,你想要的确切答案是错误的,他的答案解决了问题。
猜你喜欢
  • 2017-08-01
  • 1970-01-01
  • 2015-05-04
  • 2017-02-17
  • 2022-01-20
  • 1970-01-01
  • 2015-12-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多