使用 Nginx 在 PHP-FPM 中获取环境变量

chi*_*dit 7 php nginx environment-variables php-fpm env

我定义一些环境变量,像APP_ENV在我的/etc/environment文件中,在我的ArchLinux的。

如果我输入printenv,我会看到它们。

我创建了这个简单的测试文件,名为… test.php

<?php

var_dump(getenv('APP_ENV'));
var_dump(getenv());
Run Code Online (Sandbox Code Playgroud)

如果我运行php test.php,一切正常,我会看到我的 ENV 变量。

但是当我尝试通过 HTTP 访问文件时……我的环境中什么也没有!

当然,我已经改变了/etc/php/php-fpm.d/www.conf设置clear_env = no

这些是受影响的行:

; 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)

而且我已经重新启动了php-fpmnginx服务,但是……我的环境中仍然没有任何内容。脚本返回bool(false)

所以......我错过了什么吗?

这是我的 php-fpm 版本:

php-fpm --version
PHP 7.2.6 (fpm-fcgi) (built: May 26 2018 07:45:18)
Copyright (c) 1997-2018 The PHP Group
Zend Engine v3.2.0, Copyright (c) 1998-2018 Zend Technologies
Run Code Online (Sandbox Code Playgroud)

还有我的 Nginx 版本

nginx -v
nginx version: nginx/1.14.0
Run Code Online (Sandbox Code Playgroud)

我应该怎么做才能在 PHP-FPM 上下文中访问我的 env 变量?

非常感谢!

小智 7

您可以在 /etc/php/php-fpm.d/www.conf 中设置环境变量,如下所示: env[APP_ENV] = development 然后您就可以getenv('APP_ENV')像预期的那样获得它。

  • 这有效,但我不认为 www.conf 文件应该这样使用 (2认同)