Symfony 4是否在“生产”环境中的每个请求上加载环境变量?

时间:2019-11-28 02:06:58

标签: php symfony symfony4

Symfony 4是否以某种方式在“产品”环境中保存或缓存了环境变量参数,还是在每次请求时都检索了它们?

我的问题是,当我使用Apache托管Symfony应用程序时,我需要使用VirtualHost指令在SetEnv配置中定义所有环境变量,以列出所有环境变量;而且我宁愿不必那样做。

我希望在使用PHP CLI时,我可以通过捕获或缓存参数来“编译” Symfony项目,以便在通过Apache运行应用程序时,它可以使用这些“缓存”参数。

这是可行的还是唯一的SetEnv方法?

1 个答案:

答案 0 :(得分:1)

Symfony使用the DotEnv component处理环境变量。

DotEnv组件读取.env文件并将其内容加载到环境变量中。

  • 如果存在.env文件,则将首先加载该文件。如果没有没有 .env个文件,但是存在.env.dist个文件,则使用该文件代替它。
  • 如果存在.env.local文件,则现在将其加载。此文件永远不应提交到源代码存储库,并且其值覆盖先前文件中的值
  • 如果存在更加本地化的.env.$env.local(或者不存在,但存在.env.$env),则立即加载。同样,这些值将覆盖之前的值。

这将填充所有已声明的环境变量,但不会覆盖现有的环境变量。读取.env个文件会对性能造成影响,但是影响几乎可以忽略不计。

这些文件的加载取决于bootstrap.php文件,该文件默认情况下是在public/index.phpbin/console上加载的;因此该方法可同时为 HTTP请求和控制台应用程序提供服务,因此您可以用来存储这些值,而不必在Apache配置中使用SetEnv指令。


但是等等,还有更多...

在上面,you can dump all these variables into a PHP-optimised file是这样的,这样.env文件不需要在每次请求时都进行解析。

为此,您只需执行:

composer dump-env prod

这将创建一个.env.local.php文件。如果该文件存在,则以上任何内容都不会被读取。