2013-03-15 169 views
18

我有一個自定義的環境極少數的在/ etc /環境設置爲每ubuntu community recommendation環境變量和PHP

當我使用PHP命令行我可以使用PHP的getenv()功能訪問此變量的Ubuntu服務器。

此外,如果我從命令行運行phpinfo(),我會在ENVIRONMENT部分看到所有的變量。

但是:

當試圖訪問內部流程相同的數據通過PHP5-FPM這個數據不可用正在運行。我可以在phpinfo()環境部分看到的是:

USER www-data 
HOME /var/www 

我知道在命令行中使用該INI:

/etc/php5/cli/php.ini 

與FPM用途:

/etc/php5/fpm/php.ini 

我還沒有設法找出兩者之間的任何差異,這可以解釋爲什麼ENV變量不會在兩者中出現。

此外,如果運行:

sudo su www-data 

,然後呼應的環境變量我期待他們確實提供給www數據的用戶。

我需要做什麼來讓我的環境變量進入由PHP運行的PHP進程?

+0

你檢查了你的php-fpm過程是否在正確的用戶下運行? – outrunthewolf 2013-04-03 08:22:57

回答

21

事實證明,你必須明確地設置ENV在php-fpm.conf

瓦爾這裏有一個例子:

[global] 
pid = /var/run/php5-fpm.pid 
error_log = /var/log/php5-fpm.log 

[www] 
user = www-data 
group = www-data 
listen = /var/run/php5-fpm.sock 
pm = dynamic 
pm.max_children = 5 
pm.start_servers = 2 
pm.min_spare_servers = 1 
pm.max_spare_servers = 3 
chdir =/
env[MY_ENV_VAR_1] = 'value1' 
env[MY_ENV_VAR_2] = 'value2' 
+0

我有同樣的問題。我在正確設置環境變量的用戶下運行php-fpm。但是我用'env [MY_ENV_1] = $ MYENV1'設置了'php-fpm.conf',它使用美元符號。但我可以閱讀$ MYENV1。 phpinfo()打印出'沒有價值'。但是當我在CLI中運行時。我可以讀取正確的值。 – Magic 2014-04-15 02:47:44

1

問題是,當你運行PHP-FPM。該過程不會加載環境。
您可以將其加載到啓動腳本中。
我的php-fpm是通過apt-get安裝的。
所以修改

/etc/init.d/php5-fpm

,並添加(小心點和斜線之間的空間)

。/etc/profile文件

並修改/ etc/profile中添加

。 /home/user/env.sh

在env.sh中。無論你需要什麼環境,你都可以export

然後修改

PHP-fpm.conf

添加env[MY_ENV_VAR_1] = 'value1'[www]部。
最後。重新啓動php-fpm。您將通過fpm獲得環境負載。在PHP-fpm.conf自動

11

1.設置的環境變量

clear_env = no 


2.設置的環境變量在PHP-fpm.conf手動

env[MY_ENV_VAR_1] = 'value1' 
env[MY_ENV_VAR_2] = 'value2' 


!這兩種方法在PHP-fpm.conf描述:

在FPM工人

清除環境,防止任意環境從之前在此池 配置都乏指定ENV清零工人 環境達到FPM工作進程 變量添加。設置爲「否」將通過getenv(),$ _ENV和$ _SERVER使所有環境 變量可用於PHP代碼。 缺省值:yes

clear_env = no 


通行證環境變量,如LD_LIBRARY_PATH。所有的$ VARIABLE都是從當前環境中取得的 。默認值:乾淨ENV

env[HOSTNAME] = $HOSTNAME 
env[PATH] = /usr/local/bin:/usr/bin:/bin 
env[TMP] = /tmp 
env[TMPDIR] = /tmp 
env[TEMP] = /tmp 


我發現解決這個github discussion

+0

在我的情況下,clear_env選項甚至不存在於PHP 5.3.10中,但是像你所展示的設置var做了一個小把戲! – holms 2017-03-27 18:50:34