Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/299.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何为PHP设置全局环境变量_Php_Apache_Environment Variables - Fatal编程技术网

如何为PHP设置全局环境变量

如何为PHP设置全局环境变量,php,apache,environment-variables,Php,Apache,Environment Variables,我已经阅读了问题/答案,但不知道如何在/etc/environment中设置变量。如果我编辑文件,我是否需要重新启动我的机器,或只是注销我的当前用户(或登录一个新用户?) 我想设置一个全局变量来表示我机器上的网站处于“开发”或“测试”模式。我不想为每个项目都设置这个(无论它使用PHP、Java/Tomcat、NodeJS等等)。我知道(对于Apache),我可以通过以下方式设置环境变量: 通过putenv()直接从php(这似乎没用,因为我想避免尝试找出文件所在服务器的逻辑) 使用.htacce

我已经阅读了问题/答案,但不知道如何在/etc/environment中设置变量。如果我编辑文件,我是否需要重新启动我的机器,或只是注销我的当前用户(或登录一个新用户?)

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

  • 通过
    putenv()
    直接从php(这似乎没用,因为我想避免尝试找出文件所在服务器的逻辑)
  • 使用.htaccess
    SetEnv环境“local”
    (这需要我为每台服务器复制此文件/代码,这并不理想)
  • 使用虚拟主机指令
    SetEnv-ENVIRONMENT“local”
    (如果我使用的是虚拟主机,几乎所有情况下我都是虚拟主机,但同样需要我反复复制/粘贴代码)
  • 在httpd conf
    SetEnv环境“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'));
    

    所以我假设你在某处有一个全局配置文件。为什么不在文件中放一个可以更改的常量呢?尝试在服务器级别上设置某些内容要容易得多

    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,所以设置环境变量非常简单,在本地机器上设置环境变量应该同样容易(并且设置为永久性的)。这正是我所需要的。谢谢。我有一个类似的问题,找不到合适的解决办法。问题似乎是您通过控制台看到的环境变量在服务器上不存在,因此应用程序无法使用。如果有人能给我们建议如何保持这些变量,那就太好了。(在部署时设置变量,在运行时读取)