繁体   English   中英

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

[英]Does Symfony 4 load the environment variables on every request in the "prod" environment?

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

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

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

它是可行的还是只有SetEnv方法?

Symfony 使用DotEnv 组件来处理环境变量。

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

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

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

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


但是等等,还有更多……

在上述之上, 您可以将所有这些变量转储到 PHP 优化的文件中,这样.env文件就不需要在每次请求时都被解析。

为此,您只需执行:

composer dump-env prod

这将创建一个.env.local.php文件。 如果此文件存在,则根本不会读取上述任何内容。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM