使用PHP更新.env值

时间:2019-03-26 13:59:00

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

我知道您中的某些人可能会认为这将导致安全问题。

但是...

我只想仅更新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

人们将如何进行进一步的调试?

1 个答案:

答案 0 :(得分:2)

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

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

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

这也记录在docs中。

编辑

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

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

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

docs中详细了解它。