26

我已阅读此处的问题/答案,但我不明白如何在/etc/environment中设置变量。如果我编辑文件,我需要重新启动我的机器还是简单地注销我当前的用户(或登录一个新用户?)。

我想设置一个全局变量来表示我机器上的网站处于“开发”或“测试”模式。我不想为每个项目都设置这个(无论是使用 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'));
4

3 回答 3

51

您要做的是使用 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 代码中。这种方法允许您保持您的 vhost 文件、.htaccess 和您的其他配置文件与环境无关。

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

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

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

于 2013-11-28T16:05:33.593 回答
2

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

define('ENVIRONMENT', 'testing');
if(ENVIRONMENT == 'testing') {
   echo 'We\'re just testing';
}
于 2013-10-31T00:28:48.847 回答
0

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

你可能需要编辑你真正的httpd.conf

~/库/应用程序支持/appsolute/MAMP PRO/

代替

/应用程序/MAMP/conf/apache/

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

于 2016-01-13T23:57:08.347 回答