如何为 PHP 设置全局环境变量


How to set global environment variables for PHP

我已经阅读了这里的问题/答案,但我不明白如何在 /etc/环境中设置变量。如果我编辑文件,我是否需要重新启动计算机或只是注销当前用户(或登录新用户?

我想设置一个全局变量来表示我机器上的网站处于"开发"或"测试"模式。我不想为每个项目设置这个(无论它使用PHP,Java/Tomcat,NodeJS等)。我知道(对于 Apache)我可以通过以下方式设置环境变量:

  1. 直接从 php 和 putenv()(这似乎没用,因为我想避免试图找出文件在哪个服务器上的逻辑)
  2. 使用 .htaccess SetEnv ENVIRONMENT 'local'(这需要我为每个服务器复制此文件/代码,并不理想)
  3. 使用虚拟主机指令SetEnv ENVIRONMENT 'local'(如果我使用的是虚拟主机,在几乎所有情况下我都是,但再次要求我一遍又一遍地复制/粘贴代码)
  4. 在httpd-conf SetEnv ENVIRONMENT 'local'(这仅适用于Apache,我希望它也适用于NodeJS服务器)

并不是说我不能做#4(并有选择地将#3应用于NodeJS服务器)。但我认为这是使用/etc/environment 的一个很好的理由。正如我上面所说,我已经编辑了文件(在第一次创建文件之后)并尝试了以下组合,但似乎都不起作用:

ENVIRONMENT='local'
ENVIRONMENT=local
export ENVIRONMENT='local'
export ENVIRONMENT=local

我说它们都不起作用,因为我在输出中没有找到变量:

print_r($_SERVER);
print_r($_ENV);
echo(getenv('ENVIRONMENT'));

你要做的是使用 Apache 配置文件。您将需要访问配置文件夹和 httpd.conf 文件(或修改版本)。然后,您可以将 httpd.conf 配置为使用此方法动态加载配置文件

Include conf.d/*.conf

在 conf.d 文件夹中,放置特定的环境配置文件。

server-environment-dev.conf 示例:

SetEnv ENVIRONMENT "local"

server-environment-prod.conf 示例:

SetEnv ENVIRONMENT "production"

这些设置将在您的 php 代码中显示为可用的环境变量。此方法允许您使虚拟主机文件、.htaccess 和其他配置文件与环境无关。

etc/environment, etc/profile.d, .bash_profile, .profile, etc 文件由于某些进程/用户限制,PHP 在 Apache 中无法读取。你可以随心所欲地抨击、粉碎、崩溃变量,并在你的终端中看到它们,但它们不会显示在phpinfo()中,除非你通过其中一个Apache配置文件设置它。

对于 NodeJS,您可以启动在环境变量中传递的应用程序,或者如果您想与用户无关,您可以通过多种方式设置NODE_ENV,包括您的.bash_profile和可能的 etc/环境文件。

对 Node 的好读物:http://www.hacksparrow.com/running-express-js-in-production-mode.html

所以我假设你在某处有一个全局配置文件。为什么不在该文件中放置一个可以更改的常量?尝试在服务器级别设置某些内容要容易得多。

define('ENVIRONMENT', 'testing');
if(ENVIRONMENT == 'testing') {
   echo 'We''re just testing';
}

如果仍然无法获取环境变量:

您可能需要在

~/库/应用程序

支持/应用程序/MAMP PRO/

而不是

/

应用程序/MAMP/会议/阿帕奇/

此外,您可能需要使用getenv()而不是$_ENV