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