Laravel `.env`,系统级和服务器级环境变量

Pie*_*ier 6 php configuration environment-variables production-environment laravel-5

Laravel 5 我对文档中的以下句子有点困惑:

.env 文件中的任何变量都可以被外部环境变量(例如服务器级或系统级环境变量)覆盖。

它看起来像我想做的,即从服务器级环境变量设置一些 .env 变量,但我找不到任何有关如何执行此操作的参考。

看起来这样的配置背后存在一些安全问题,但是下面的stackoverflow答案并没有评论这句话。

我还倾向于认为,如果在文件中使用对环境变量的引用.env,则恰恰是为了删除机密信息,因此我不再看到安全问题。

我的结论是我误解了这句话,但我很乐意理解为什么,或者,如果碰巧有可能的话,知道如何做到这一点。谢谢。

Ste*_*man 5

我对此也很好奇。这是你的答案:

系统级环境变量:

这些是在实际操作系统本身上设置的。

例如,在 Windows 中,可以在以下位置配置系统级变量:

  1. 控制面板
  2. 系统属性
  3. 单击环境变量
  4. 您将看到 Windows 包含的所有系统级变量

不幸的是,不确定 env 变量在 Linux 中存储在哪里。

服务器级环境变量:

这些是在主机服务器上设置的,例如在 Apache 中,可以通过文件配置服务器级别的环境变量/etc/apache2/envvars

https://httpd.apache.org/docs/2.4/mod/mod_env.html#setenv

在 Windows IIS 上,可以通过此处描述的 FastCGI 模块配置它们:

https://learn.microsoft.com/en-us/iis/configuration/system.webserver/fastcgi/application/environmentvariables/#how-add-a-fastcgi-environment-variable-for-php

如果超链接发生变化:

  1. 打开 IIS 管理器
  2. 在“连接”窗格中,单击要为其配置 FastCGI 设置的服务器名称。
  3. 在主页窗格中,双击 FastCGI 设置。
  4. 在 FastCGI 设置窗格中突出显示 PHP 应用程序,然后单击操作窗格中的编辑...
  5. 在“编辑 FastCGI 应用程序”对话框中,单击“环境变量”旁边的省略号 (...) 以打开环境变量集合编辑器。
  6. 在“环境变量集合编辑器”对话框中,单击“添加”。
  7. 输入以下信息,然后单击“确定”。
  • 输入“PHP_FCGI_MAX_REQUESTS”作为名称。
  • 输入“10000”作为值。
  1. 单击“确定”关闭“添加 FastCGI 应用程序”对话框。

.env变量:

当然,这些是您.env在 Laravel 应用程序根目录的文件中定义的环境变量。

  • @PierreCodier 我在 Laravel 6 的 Linux docker 容器上进行的测试表明,确实 **系统环境变量被 .env 文件中的变量覆盖** - 而不是相反。然而文档仍然说“.env 文件中的任何变量都可以被外部环境变量覆盖,例如服务器级或系统级环境变量。”* 这似乎是文档中的一个错误。我希望所记录的方式是真实的,因为它可以提供更大的灵活性。 (3认同)
  • 据我记得,我尝试设置系统级环境变量,但 Laravel 没有考虑它们;他们没有_覆盖_ .env var。现在有点远了,但我想我的问题是如何让 Laravel 考虑到它们。我想不是通过某种 os.environ (我来自 Python 世界),因为 php 不允许这样做(如果我是正确的)。 (2认同)