我想了解如何设置和重置(覆盖)环境变量。我在 Mac 上运行 Apache/2.2.24 (Unix) PHP/5.4.14。我的理论是这样的:
可以在 bash 中设置环境变量,然后可以使用位于 php.ini 之前的 VirtualHost 指令前面的 httpd.conf 来覆盖它们,然后可以使用 .htaccess(如果允许)覆盖它们,最后由 PHP 覆盖它们
我尝试了以下操作:
在 bash 中设置环境变量:我添加
export ENVIRONMENT='local'
到我的~/.bashrc文件,重新启动 apache,但没有得到任何输出print_r($_ENV);
(在我的网络服务器根目录下的一个简单的 index.php 文件中)。我还尝试ENVIRONMENT='local'
输入/etc/环境,并重新启动 apache,没有任何效果,以及在 /etc/bashrc 中,重新启动 apache。仍然没有反应。在 httpd.conf 中设置环境变量:我
SetEnv ENVIRONMENT 'local-httpd
在我的/etc/apache2/httpd.conf文件(但在我加载其他 conf 文件之前,例如虚拟主机 [Include /private/etc/apache2/other/*.conf
])。我现在在数组中看到了变量,print_r($_SERVER);
但没有print_r($_ENV);
。在 httpd-vhosts.conf 中设置环境变量:我添加
SetEnv ENVIRONMENT 'local-vhost
到我的/etc/apache2/extra/httpd-vhosts.conf指向我的默认文档根目录的通用指令中的文件。我现在看到变量已被覆盖(从 local-httpd 覆盖到 local-vhost,所以我知道变量在哪里设置)。在 php.ini 中设置环境变量:在寻找合适的位置放置环境变量时,我注意到设置
variables_order = "GPCS"
为生产值而不是EGPCS
。我更改了它,重新启动了服务器,发现我现在得到了输出,print_r($_ENV);
但不是我预期的自定义变量。似乎我无法在此文件中设置自定义变量。如果我错了,请告诉我在.htaccess 中设置环境变量:我添加了
SetEnv ENVIRONMENT 'local-htaccess'
。这按预期工作,覆盖了设置的所有其他值。在 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