2013-03-15 276 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