PHP`getEnv`能够读取系统环境变量

时间:2017-05-25 01:15:44

标签: php apache docker

我有一个docker容器,我在Alpine上设置了PHP 5.6和Apache 2.4。在我的PHP代码中,我使用getEnv来读取我从Host Machine传递的环境变量作为docker compose文件的一部分。似乎我可以读取环境变量。也许我的理解是错误的,但我认为我需要在我的Apache虚拟主机配置中使用passenv,或者我应该将其添加到envvars文件中并由Apache加载。知道为什么会这样吗?

搬运工-compose.yml

version: '2'
services:
  app:
    image: image1
    environment:
      - HOST

当我运行Env时,在容器内部,我可以看到HOST=192.168.1.1。在PHP代码中,我正在使用getEnv('HOST'),这是有效的。这个问题不是如何让它工作,因为它工作:)但更像是为什么它的工作

1 个答案:

答案 0 :(得分:0)

在对此问题做进一步研究之后。我想也许我知道为什么。 env Apache模块用于将环境变量传递给CGI和SSI页面。因为对于CGI和SSI,Apache产生了一个单独的进程,我们需要env模块将环境变量传递给新创建的进程。在Apache PHP模块的情况下,同样没有发生。在Apache PHP模块中,Apache使用嵌入式解释器来处理php文件。由于它是相同的Apache进程,因此主机中可用的所有环境变量都可用于该进程。

  1. https://httpd.apache.org/docs/2.4/mod/mod_env.html
  2. https://blog.layershift.com/which-php-mode-apache-vs-cgi-vs-fastcgi/