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

时间:2013-10-31 00:15:38

标签: php apache environment-variables

我已阅读问题/答案here但我不明白如何在 / 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服务器)。
  5. 我不是说我不能做#4(并且选择性地将#3应用于NodeJS服务器)。但我认为这是使用/ etc / environment的一个很好的理由。正如我上面所说,我已经编辑了文件(在首次创建之后)并尝试了以下组合,其中没有一个似乎有效:

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

    我说没有一个有效,因为我没有在输出中找到变量:

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

3 个答案:

答案 0 :(得分:42)

您要做的是使用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和其他配置文件与环境无关。

由于某些进程/用户限制,

etc / environment,etc / profile.d,.bash_profile,.profile等文件在Apache中无法被PHP读取。您可以对所有想要的变量进行打击,粉碎,崩溃,并在终端中查看它们,但除非您通过其中一个Apache配置文件进行设置,否则它们不会显示在phpinfo()中。

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

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

答案 1 :(得分:1)

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

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

答案 2 :(得分:0)

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

您可能需要在

中编辑真实 httpd.conf
  

〜/ Library / Application Support / appolute / MAMP PRO /

而不是

  

/应用程序/ MAMP / CONF /阿帕奇/

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