与.php文件相比,在.env文件上存储信息有什么优势?

时间:2018-11-21 13:35:49

标签: php

考虑到最佳实践建议,考虑将设置信息存储在文档根文件夹之外的.env文件中...与.php文件相比,使用.env文件有什么好处?

.env文件将由库解析并存储在ENV变量中。 .php文件不需要解析,并将存储有关ENV变量的信息。

谢谢!

2 个答案:

答案 0 :(得分:2)

.env文件的创建是为了使开发更加容易,并且不仅在PHP中使用,例如在ruby中,您可以使用.env文件https://github.com/bkeepers/dotenv

如果我们看一下十二项原则。说明如下:

  

十二个因素的应用程序将配置存储在环境变量中(通常缩写为env vars或env)。 Env var易于在部署之间进行更改,而无需更改任何代码。与配置文件不同,它们很少有可能被意外检入代码存储库;与自定义配置文件或其他配置机制(例如Java系统属性)不同,它们是与语言和操作系统无关的标准。

https://12factor.net/config

所以dotenv只是使开发人员轻松实现此目的的工具

答案 1 :(得分:2)

在开发时,您将具有一组在本地环境或正在开发的其他环境上配置的密钥。您不希望与与您一起工作的其他开发人员共享这些密钥(数据库密码,电子邮件服务等)。如果您不与世界共享代码,也不会。

.env文件的创建是为了使您拥有一个工作环境而不必与世界或团队其他成员共享这些密钥。他们应该对项目解决的环境是唯一的。

当您创建将在整个项目中使用的密钥时,除了将它们添加到.env文件中之外,您还应该将它们添加到已推送到存储库的.env.example中。将密钥保留在其中,同时将.env.example的值保留为空,以便其他开发人员了解项目正常工作所需的密钥是什么,以及他们应该在其中添加什么,而不会提示您本地密码是什么

此外,当您在本地环境中工作时,通常会使用本地密码。当您部署到将存在包含敏感信息的真实密码的生产服务器时,会出现问题。因此,您不希望它们存在于存储库中,并且绝对不希望它们永久存储在存储库中(这是专业责任,特别是当您被标记为开发人员而不是系统管理员时)项目在生产环境中部署后,系统管理员将在其中添加密钥)。

这是绕过以上这些问题的绝妙方法

在评论中回答您的第二个问题

说实话,如果您最终遵循我上面的解释,则可以同时使用两种方法。主要目标是保护变量。但是您可以拒绝将php文件推送回购。

我认为为什么应该使用.env而不是.php如下:
1.使用.env,您立即知道它是环境变量所有者。 .php不管您如何命名,在理解上都不那么直接;
2.列出目录时,.env将是一个神秘文件;
3.在同一个仓库中与其他开发人员合作时,更容易快速识别并理解不应在该提交上执行的操作(即使在钩子上添加额外的安全层以确保{{1 }}不会在提交时被推送。这更加困难,您必须对此.env文件进行硬编码);

我想在您的论点级别上,当决定文件之间时,这些将是一些“转到”的步骤。我将.php文件保留为.php

现在,如果您在php programming files instead of configs.env之间问我,我想说的是与您熟悉/自在的人一起去。最后,您避免使用.yml相同的内容:)

PS :另外,如果您考虑何时需要.php之一时如何在代码中引用它们,当您看到类似以下内容时,它会跳得更快:

environment variables