我想创建一个Laravel Web应用程序,允许管理员用户使用Web后端系统在.env文件中更改某些变量(如数据库凭据)。但是,如何保存更改?如何在Laravel中动态更改.env文件中的变量?
8
A
回答
16
有没有内置的方式来做到这一点。如果您真的想更改.env
文件的内容,则必须将某种字符串替换与PHP的文件写入方法结合使用。对于一些灵感,你应该看看key:generate
命令:KeyGenerateCommand.php:文件的路径是建立和存在的检查
$path = base_path('.env');
if (file_exists($path)) {
file_put_contents($path, str_replace(
'APP_KEY='.$this->laravel['config']['app.key'], 'APP_KEY='.$key, file_get_contents($path)
));
}
后,命令只是替换APP_KEY=[current app key]
与APP_KEY=[new app key]
。你应该可以用其他变量进行相同的字符串替换。
最后但并非最不重要我只是想说,让用户更改.env文件可能不是最好的主意。对于大多数自定义设置,我建议将它们存储在数据库中,但是,如果设置本身是连接到数据库所必需的,那么这显然是一个问题。
1
我有同样的问题,并已创建下面
public static function changeEnvironmentVariable($key,$value)
{
$path = base_path('.env');
if(is_bool(env($key)))
{
$old = env($key)? 'true' : 'false';
}
if (file_exists($path)) {
file_put_contents($path, str_replace(
"$key=".$old, "$key=".$value, file_get_contents($path)
));
}
}
1
又一实现的功能,如果你有这样的:
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);
}
1
更新Erick的回答考虑$old
值覆盖sting,bool和空值。
public static function changeEnvironmentVariable($key,$value)
{
$path = base_path('.env');
if(is_bool(env($key)))
{
$old = env($key)? 'true' : 'false';
}
elseif(env($key)===null){
$old = 'null';
}
else{
$old = env($key);
}
if (file_exists($path)) {
file_put_contents($path, str_replace(
"$key=".$old, "$key=".$value, file_get_contents($path)
));
}
}
相关问题
- 1. 在Docker中设置动态Env变量
- 2. 如何在Linux中更新Env变量?
- 3. Docker Compose:更改env变量
- 4. 如何在jenkins中使用属性文件中的env变量
- 5. 无法访问Laravel中的env变量
- 6. 在GKE上更改kubernetes主env变量
- 7. 试图更改.env文件中的值
- 8. 如何动态更改Ansible变量?
- 9. 如何更改动态变量值
- 10. 如何动态更改变量名称?
- 11. 如何动态更改变量值?
- 12. 如何在honcho .env文件中添加多行变量?
- 13. 如何在EmberJS中设置“ENV”变量?
- 14. 如何在node.js中导出env变量
- 15. Android:动态更改变量
- 16. 动态更改PHP变量
- 17. 动态更改javascript变量
- 18. 动态更改变量
- 19. 在php文件中更改变量
- 20. 如何动态更改for循环python中的变量名称?
- 21. 如何动态更改PL/SQL包中全局变量的值?
- 22. 得到ENV变量文件
- 23. Laravel中的动态perPage变量选择
- 24. Laravel Vue env变量在哪里?
- 25. loacalhost vs127.0.0.1 laravel中的.env文件
- 26. 在ansible_python_interpreter变量中使用env变量
- 27. 动态类选择通过ENV变量
- 28. 更改文件中变量的值
- 29. 更改文件中的网站变量
- 30. 如何保护.env文件laravel
$ old可能未定义 – sgotre