emi*_*mix 2 php environment-variables symfony symfony4
// The check is to ensure we don't use .env in production
if (!isset($_SERVER['APP_ENV'])) {
(new Dotenv())->load(__DIR__.'/../.env');
}
Run Code Online (Sandbox Code Playgroud)
这是什么原因呢?为什么.env在生产环境中应该忽略文件?
其背后的想法.env是,它应主要用于开发和测试环境,因为在其他环境(例如生产环境或暂存Web服务器)中,您应该能够在外部设置这些变量。例如,Nginx 允许您env在配置文件中使用伪指令来设置应用程序将能够使用的变量。
我认为Symfony之所以选择.env这种方式,是因为它允许您统一开发人员可能拥有的任何运行时环境中的变量的方式。还要记住,在生产部署中,环境变量是一流的,非常常见,并且不会经常更改。
这里的另一件事是安全性:服务器配置应该比Symfony应用程序的源代码更安全。例如,对于可以访问产品服务器上的应用程序根目录的文件系统的用户,如果数据库凭据仅存储在中.env,则可以窃取它们,但是如果将它们安全地保存在服务器配置中的外部,则将无法访问它们应用根目录。
无论如何,如果您准备冒险将生产计算机上的配置暴露给有权访问的每个人.env,那么您仍然可以.env在登台或生产环境中启用它。为此,您应该删除以下行或将其注释掉index.php:
// Comment out the if statement so the code gets run every time:
// if (!isset($_SERVER['APP_ENV'])) {
(new Dotenv())->load(__DIR__.'/../.env');
// }
Run Code Online (Sandbox Code Playgroud)
另外,您还必须将DotEnv依赖关系从require-devdeps移至require您的部分composer.json:
{
"type": "project",
"license": "proprietary",
"require": {
...
"symfony/dotenv": "^4.0",
...
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
986 次 |
| 最近记录: |