2017-05-25 163 views
1

我有一個碼頭容器,我已經在Alpine上設置了PHP 5.6和Apache 2.4。在我的PHP代碼中,我使用getEnv來讀取我作爲Docker撰寫文件的一部分從Host Machine傳遞的環境變量。看來我可以讀取環境變量。也許我的理解是錯誤的,但我認爲我需要在我的Apache虛擬主機配置中使用passenv,或者我應該將它添加到envvars文件中並獲取由Apache加載的文件。任何想法,爲什麼這有效?PHP`getEnv`能夠讀取系統環境變量

泊塢窗,compose.yml

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

容器內,當我運行Env我可以看到HOST=192.168.1.1。在PHP代碼中,我使用的是getEnv('HOST'),這很有效。這個問題不是如何讓它工作,因爲它工作:)但更像是它爲什麼工作

+1

代碼,請。你想讀什麼變量? – tadman

+0

添加代碼,希望對您有所幫助 – tabiul

+0

試試另一個變種。比方說,' - FOO = BAR' – Robert

回答

0

在做了進一步的研究後,這個問題。我想也許我知道爲什麼。 env Apache模塊用於將環境變量傳遞給CGI和SSI頁面。因爲對於CGI和SSI,Apache產生了一個獨立的進程,我們需要env模塊將環境變量傳遞給新創建的進程。在Apache PHP模塊的情況下,同樣沒有發生。在Apache PHP Module中,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/