我知道您中的某些人可能会认为这将导致安全问题。
但是...
我只想仅更新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
人们将如何进行进一步的调试?
答案 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中详细了解它。