环境变量的操作顺序

环境变量的操作顺序

我想了解如何设置和重置(覆盖)环境变量。我在 Mac 上运行 Apache/2.2.24 (Unix) PHP/5.4.14。我的理论是这样的:

可以在 bash 中设置环境变量,然后可以使用位于 php.ini 之前的 VirtualHost 指令前面的 httpd.conf 来覆盖它们,然后可以使用 .htaccess(如果允许)覆盖它们,最后由 PHP 覆盖它们

我尝试了以下操作:

  1. 在 bash 中设置环境变量:我添加export ENVIRONMENT='local'到我的~/.bashrc文件,重新启动 apache,但没有得到任何输出print_r($_ENV);(在我的网络服务器根目录下的一个简单的 index.php 文件中)。我还尝试ENVIRONMENT='local'输入/etc/环境,并重新启动 apache,没有任何效果,以及在 /etc/bashrc 中,重新启动 apache。仍然没有反应。

  2. 在 httpd.conf 中设置环境变量:SetEnv ENVIRONMENT 'local-httpd在我的/etc/apache2/httpd.conf文件(但在我加载其他 conf 文件之前,例如虚拟主机 [ Include /private/etc/apache2/other/*.conf])。我现在在数组中看到了变量,print_r($_SERVER);但没有print_r($_ENV);

  3. 在 httpd-vhosts.conf 中设置环境变量:我添加SetEnv ENVIRONMENT 'local-vhost到我的/etc/apache2/extra/httpd-vhosts.conf指向我的默认文档根目录的通用指令中的文件。我现在看到变量已被覆盖(从 local-httpd 覆盖到 local-vhost,所以我知道变量在哪里设置)。

  4. 在 php.ini 中设置环境变量:在寻找合适的位置放置环境变量时,我注意到设置variables_order = "GPCS"为生产值而不是EGPCS。我更改了它,重新启动了服务器,发现我现在得到了输出,print_r($_ENV);但不是我预期的自定义变量。似乎我无法在此文件中设置自定义变量。如果我错了,请告诉我

  5. 在.htaccess 中设置环境变量:我添加了SetEnv ENVIRONMENT 'local-htaccess'。这按预期工作,覆盖了设置的所有其他值。

  6. 在 PHP 中设置/覆盖环境变量:

    如果 (...) {
     putenv('环境=本地');
    }

我之所以问这个问题,是因为我有很多本地和远程测试服务器,其中一些可能允许或不允许我访问以修改 httpd、httpd-vhost、php.ini 或环境变量。我想了解哪种方式最适合这些不同的场景(共享主机、heroku、本地服务器等)

我显然不知道如何正确地在 bash 中设置环境变量以便 php 可以使用它,我想知道如何做到这一点(因为我认为 Heroku 做了类似的事情heroku config set...

答案1

通常 Apache 使用用户 www-data,这意味着您不必修改 ~/.bashrc 而是修改 /var/www/.bashrc。

因为:


$ ~www-data
-bash: /var/www: Is a directory

相关内容