PHP-fpm + nginx没有可用的环境变量

时间:2013-10-29 13:32:53

标签: php nginx environment-variables

我试图通过以下方式修改php.ini:

variables_order = "GPCSE"
register_globals = On

但是所需的变量(PATH)既不在$ _ENV数组中,也不能通过getenv('PATH')接受 正如标题所说,我正在运行nginx + php-fpm(Ubuntu 10.04)

P.S。 在控制台中执行下一个comamnd会得到正确的结果: php -r“echo getenv('PATH');”

我猜PATH是bash的环境变量,但只要php-fpm不是通过bash启动它就没有必需的变量。有什么方法可以包括它们吗?

感谢。

UPD#1 作为临时解决方案,我发现PATH变量存储在'/ etc / environment'文件中。所以我只是从那里读它。如果有人需要代码:

preg_match('/^(PATH)="?([^"]+)"?$/i', file_get_contents('/etc/environment'), $match);
putenv($match[1]."=".$match[2]);

3 个答案:

答案 0 :(得分:5)

将OwnCloud安装升级到8.1版时,我遇到了这个问题。

他们在documentation

中描述了修正

摘要是:在php5-fpm配置文件夹中找到您的www.conf文件(对于Ubuntu,这是/etc/php5/fpm/pool.d/www.conf)并取消注释所需的env [PATH]行。

(可选)使用php -r "echo getenv('PATH');"

的输出更新变量的内容

答案 1 :(得分:1)

默认情况下, PHP-FPM 清除环境变量(从 www.conf ):

; Clear environment in FPM workers
; Prevents arbitrary environment variables from reaching FPM worker processes
; by clearing the environment in workers before env vars specified in this
; pool configuration are added.
; Setting to "no" will make all environment variables available to PHP code
; via getenv(), $_ENV and $_SERVER.
; Default Value: yes
;clear_env = no

您可以取消注释最后一行以将clear_env设置为no,但如果愿意,可以仅设置所需的环境变量:

env[PATH] = $PATH

答案 2 :(得分:0)

您可以通过包含路径指定它:http://www.php.net/manual/en/ini.core.php#ini.include-path

你可以指定你的php.ini(虽然你可能想要一个特定的路径而不是包括所有东西)

  

的include_path =”:在/ usr / local / sbin中:在/ usr / local / bin中:/ usr / sbin目录:在/ usr / bin中:/ sbin目录:/ bin中:在/ usr /游戏:/家庭/ FO TA /开发/ adt-bundle-linux-x86_64-20130917 / sdk / platform-tools“