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

blpfk2vs  于 5个月前  发布在  Nginx
关注(0)|答案(4)|浏览(63)

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

variables_order = "GPCSE"
register_globals = On

字符串
但所需的PATH变量既不在$_ENV中,也不能通过getenv('PATH')访问。
我正在Ubuntu 10.04上运行Nginx+PHP-FPM

**注意:**在控制台中执行以下命令可得到正确得结果:

php -r "echo getenv('PATH');"


我猜PATH是bash的环境变量,但是只要php-fpm不是通过bash启动的,它就没有所需的变量。
谢谢.

更新#1:作为临时解决方案,我发现PATH变量存储在“/etc/environment”文件中。因此,我将从那里读取它。如果有人需要代码:

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

dm7nw8vv

dm7nw8vv1#

默认情况下,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

yrefmtwq

yrefmtwq2#

我在将OwnCloud安装升级到8.1版本时遇到了这个问题。
他们在文档中描述了一个修复程序
在php5-fpm config文件夹中找到www.conf文件(对于Ubuntu,这是/etc/php5/fpm/pool.d/www.conf),并取消注解所需的env[PATH]行。
可选地,使用php -r "echo getenv('PATH');"的输出更新变量的内容

t3psigkw

t3psigkw3#

您可以通过包含路径来指定它:http://www.php.net/manual/en/ini.core.php#ini.include-path
您可以在php.ini中指定它(尽管您可能需要一个特定的路径,而不是包括所有内容)
包括_path=".:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/home/fo bundle/Development/adt-bundle-linux-x86_64-20130917/sdk/platform-tools“

kupeojn6

kupeojn64#

在我的情况下,问题是nginx配置中的php-fpm端口不正确:我将fastcgi_pass设置为9001(pm.status_listen)而不是9000(listen)。我花了几乎整个工作日才理解问题的原因,因为配置正常,除了一件事:phpfpm不传递外部环境变量。

相关问题