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

Sat*_*Sat 4 php nginx environment-variables

我试着用以下方式修改php.ini:

variables_order = "GPCSE"
register_globals = On
Run Code Online (Sandbox Code Playgroud)

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

PS在控制台中执行下一个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]);
Run Code Online (Sandbox Code Playgroud)

Aym*_*Dev 12

默认情况下,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
Run Code Online (Sandbox Code Playgroud)

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

env[PATH] = $PATH
Run Code Online (Sandbox Code Playgroud)


hei*_*ine 6

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

他们描述了文档中的修复

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

(可选)使用输出更新变量的内容 php -r "echo getenv('PATH');"


xia*_*kai 0

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

\n\n

您可以在 php.ini 中指定它(尽管您可能需要特定路径而不是包含所有内容)

\n\n
\n

include_path=".:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/home/fo\xe2\x80\x8c \xe2\x80\x8bta/开发/adt-bundle-linux-x86_64-20130917/sdk/平台工具“

\n
\n