aly*_*yda 21 php apache environment-variables
我在这里阅读了问题/答案,但我不明白如何在/ 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
Run Code Online (Sandbox Code Playgroud)
我说它们都没有用,因为我没有在输出中找到变量:
print_r($_SERVER);
print_r($_ENV);
echo(getenv('ENVIRONMENT'));
Run Code Online (Sandbox Code Playgroud)
nop*_*you 42
您要做的是使用Apache配置文件.您将需要访问配置文件夹和httpd.conf文件(或修改版本).然后,您可以使用此方法配置httpd.conf以动态加载配置文件
Include conf.d/*.conf
Run Code Online (Sandbox Code Playgroud)
在conf.d文件夹中,您可以放置特定的环境配置文件.
server-environment-dev.conf示例:
SetEnv ENVIRONMENT "local"
Run Code Online (Sandbox Code Playgroud)
server-environment-prod.conf示例:
SetEnv ENVIRONMENT "production"
Run Code Online (Sandbox Code Playgroud)
这些设置将在您的PHP代码中显示为可用的环境变量.此方法允许您使vhost文件,.htaccess和其他配置文件与环境无关.
由于某些进程/用户限制,Apache /中的PHP无法读取etc/environment,etc/profile.d,.bash_profile,.profile等文件.您可以对所有变量进行打击,粉碎,崩溃并查看它们在终端中的设置,但除非您通过其中一个Apache配置文件进行设置,否则它们不会显示在phpinfo()中.
对于NodeJS,您可以启动应用程序传递环境变量,或者您可以通过多种方式设置NODE_ENV,包括.bash_profile和可能的etc/environment文件(如果您想要与用户无关).
对Node的一个很好的解读:http: //www.hacksparrow.com/running-express-js-in-production-mode.html
所以我假设你在某个地方有一个全局配置文件。为什么不在该文件中放置一个可以更改的常量呢?尝试在服务器级别设置某些内容会容易得多。
define('ENVIRONMENT', 'testing');
if(ENVIRONMENT == 'testing') {
echo 'We\'re just testing';
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
40832 次 |
最近记录: |