我想创建一个 Laravel 网络应用程序,允许管理员用户使用网络后端系统更改 .env 文件中的一些变量(例如数据库凭据)。但是如何保存更改?
原文由 Joshua Leung 发布,翻译遵循 CC BY-SA 4.0 许可协议
我想创建一个 Laravel 网络应用程序,允许管理员用户使用网络后端系统更改 .env 文件中的一些变量(例如数据库凭据)。但是如何保存更改?
原文由 Joshua Leung 发布,翻译遵循 CC BY-SA 4.0 许可协议
另一个实现,如果你有类似的东西:
A = B #这是一个有效条目
在你的 .env 文件中
public function updateEnv($data = array())
{
if (!count($data)) {
return;
}
$pattern = '/([^\=]*)\=[^\n]*/';
$envFile = base_path() . '/.env';
$lines = file($envFile);
$newLines = [];
foreach ($lines as $line) {
preg_match($pattern, $line, $matches);
if (!count($matches)) {
$newLines[] = $line;
continue;
}
if (!key_exists(trim($matches[1]), $data)) {
$newLines[] = $line;
continue;
}
$line = trim($matches[1]) . "={$data[trim($matches[1])]}\n";
$newLines[] = $line;
}
$newContent = implode('', $newLines);
file_put_contents($envFile, $newContent);
}
原文由 Daniel Teleginski Camargo 发布,翻译遵循 CC BY-SA 3.0 许可协议
2 回答3.1k 阅读✓ 已解决
1 回答1.4k 阅读✓ 已解决
1 回答1k 阅读✓ 已解决
1 回答1.2k 阅读✓ 已解决
3 回答1.2k 阅读
2 回答1.2k 阅读
1 回答1.2k 阅读
没有内置的方法可以做到这一点。如果你真的想改变
.env
文件的内容,你将不得不使用某种字符串替换结合PHP的文件写入方法。要获得一些灵感,您应该查看key:generate
命令: KeyGenerateCommand.php :构建文件路径并检查是否存在后,该命令只需将
APP_KEY=[current app key]
替换为APP_KEY=[new app key]
。您应该能够用其他变量进行相同的字符串替换。最后但同样重要的是,我只想说让用户更改 .env 文件可能不是最好的主意。对于大多数自定义设置,我建议将它们存储在数据库中,但是如果设置本身是连接到数据库所必需的,这显然是一个问题。