我已经阅读了这里的问题/答案,但我不明白如何在/ etc / environment中设置variables。 如果我编辑文件,是否需要重新启动我的机器或只需登出我的当前用户(或login一个新的?)。
我想设置一个全局variables来表示我的机器上的网站处于“开发”或“testing”模式。 我不想为每个项目都设置它(无论是使用PHP,Java / Tomcat,NodeJS等)。 我知道(对于Apache)我可以通过以下方式设置环境variables:
putenv()
(这似乎是无用的,因为我想避免逻辑,试图找出什么服务器上的文件) SetEnv ENVIRONMENT 'local'
(这将需要我复制这个文件/代码为每个服务器,不理想) SetEnv ENVIRONMENT 'local'
(如果我正在使用虚拟主机,几乎在所有情况下都是这样,但又要求我一遍又一遍地复制/粘贴代码) 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