【发布时间】: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