为什么getenv()在从终端运行时只返回一个变量,而不是通过web服务器


Why is getenv() only returning a variable when run from the terminal, not via web server

我试图在我的PHP应用程序中使用自定义环境变量进行环境检测。我已经在/etc/environment中设置了系统范围的变量,重新启动,并使用printenv检查它在终端中是否可见。

我还检查了它在命令行运行PHP时是否可见:

php -r 'echo getenv("LOCAL_DEVELOPMENT");'
//returns 'true' as expected

但是当我尝试从一个网页脚本,变量没有找到:

var_dump(getenv("LOCAL_DEVELOPMENT"));
//returns 'boolean false' (not expected)

我使用的是Ubuntu 12.04 LTS, PHP 5.4和Apache 2.2。

为什么变量不可见从web脚本,我该如何解决这个问题?

假设您使用的是apache服务器,我认为这是因为apache受到了系统环境变量的限制。为了安全。

您应该在apache上设置环境变量,如SetEnv LOCAL_DEVELOPMENT true,甚至更好,SetEnv APPLICATION_ENV development通常被认为是标准的。