如何为PHP设置全局环境variables

我已经阅读了这里的问题/答案,但我不明白如何在/ etc / environment中设置variables。 如果我编辑文件,是否需要重新启动我的机器或只需登出我的当前用户(或login一个新的?)。

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

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

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

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

我说,他们都没有工作,因为我没有find输出variables:

 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代码中。 这种方法允许您保持您的vhost文件,.htaccess和您的其他配置文件不受环境的影响。

etc / environment,etc / profile.d,.bash_profile,.profile等文件在Apache中由于某些进程/用户限制而不能被PHP读取。 你可以打开,粉碎,崩溃所有你想要的变量,看到它们在你的终端中设置,但是它们不会在phpinfo()中显示出来,除非你通过一个Apache配置文件来设置。

对于NodeJS,您可以启动应用程序传递到您的环境变量,或者您可以通过多种方式设置NODE_ENV,如果您希望成为用户不可知的,请包括.bash_profile和可能的etc / environment文件。

一个好的阅读节点: http : //www.hacksparrow.com/running-express-js-in-production-mode.html

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

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

如果你仍然无法获得你的环境变量:

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

〜/ Library / Application Support / appsolute / MAMP PRO /

代替

/应用程序/ MAMP / conf目录/阿帕奇/

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