如何为PHP设置全局环境变量
我已经阅读了问题/答案,但不知道如何在/etc/environment中设置变量。如果我编辑文件,我是否需要重新启动我的机器,或只是注销我的当前用户(或登录一个新用户?) 我想设置一个全局变量来表示我机器上的网站处于“开发”或“测试”模式。我不想为每个项目都设置这个(无论它使用PHP、Java/Tomcat、NodeJS等等)。我知道(对于Apache),我可以通过以下方式设置环境变量:如何为PHP设置全局环境变量,php,apache,environment-variables,Php,Apache,Environment Variables,我已经阅读了问题/答案,但不知道如何在/etc/environment中设置变量。如果我编辑文件,我是否需要重新启动我的机器,或只是注销我的当前用户(或登录一个新用户?) 我想设置一个全局变量来表示我机器上的网站处于“开发”或“测试”模式。我不想为每个项目都设置这个(无论它使用PHP、Java/Tomcat、NodeJS等等)。我知道(对于Apache),我可以通过以下方式设置环境变量: 通过putenv()直接从php(这似乎没用,因为我想避免尝试找出文件所在服务器的逻辑) 使用.htacce
putenv()
直接从php(这似乎没用,因为我想避免尝试找出文件所在服务器的逻辑)SetEnv环境“local”
(这需要我为每台服务器复制此文件/代码,这并不理想)SetEnv-ENVIRONMENT“local”
(如果我使用的是虚拟主机,几乎所有情况下我都是虚拟主机,但同样需要我反复复制/粘贴代码)SetEnv环境“local”
中(这只适用于apache,我希望它也适用于NodeJS服务器)ENVIRONMENT='local'
ENVIRONMENT=local
export ENVIRONMENT='local'
export ENVIRONMENT=local
我说它们都不起作用,因为我没有在以下输出中找到变量:
print_r($_SERVER);
print_r($_ENV);
echo(getenv('ENVIRONMENT'));
所以我假设你在某处有一个全局配置文件。为什么不在文件中放一个可以更改的常量呢?尝试在服务器级别上设置某些内容要容易得多
define('ENVIRONMENT', 'testing');
if(ENVIRONMENT == 'testing') {
echo 'We\'re just testing';
}
您要做的是使用Apache配置文件。您需要访问配置文件夹和httpd.conf文件(或修改版本)。然后可以使用这种方法配置httpd.conf以动态加载配置文件
Include conf.d/*.conf
在conf.d文件夹中,您可以放置特定的环境配置文件
server-environment-dev.conf示例:
SetEnv ENVIRONMENT "local"
SetEnv ENVIRONMENT "production"
server-environment-prod.conf示例:
SetEnv ENVIRONMENT "local"
SetEnv ENVIRONMENT "production"
这些设置将作为可用的环境变量显示在php代码中。这种方法允许您保持vhost文件、.htaccess和其他配置文件与环境无关
由于某些进程/用户限制,Apache中的PHP无法读取etc/environment、etc/profile.d、.bash_profile、.profile等文件。您可以随意地对变量进行bash、smash、crash操作,并在终端中看到它们的设置,但除非通过Apache配置文件进行设置,否则它们不会显示在phpinfo()中
对于NodeJS,您可以启动应用程序并传入环境变量,或者您可以通过多种方式设置NODE_ENV,包括您的.bash_配置文件,如果您希望用户不可知,还可以设置etc/environment文件
节点的良好读取:
如果仍然无法获取环境变量: 您可能需要在中编辑您的realhttpd.conf ~/Library/Application Support/appsolute/MAMP PRO/ 而不是 /Applications/MAMP/conf/apache/
此外,您可能需要使用getenv()而不是$\u ENV是,但该文件在git中跟踪,并通过git推送到服务器。我可以将该变量放在一个单独的、未跟踪的文件中,但我必须对我所有的本地网站都这样做,这就是为什么我认为这是像/etc/environment这样的东西的要点,它适用于我的整个环境,并且应该可以访问我机器环境中的所有网站。因为我使用heroku,所以设置环境变量非常简单,在本地机器上设置环境变量应该同样容易(并且设置为永久性的)。这正是我所需要的。谢谢。我有一个类似的问题,找不到合适的解决办法。问题似乎是您通过控制台看到的环境变量在服务器上不存在,因此应用程序无法使用。如果有人能给我们建议如何保持这些变量,那就太好了。(在部署时设置变量,在运行时读取)