我想了解如何设置和重置(重写)环境variables。 我在Mac上运行Apache / 2.2.24(Unix)PHP / 5.4.14。 我的理论是这样的:
环境variables可以在bash中设置,然后可以用php.ini之前的一个VirtualHost指令之前的httpd.conf覆盖,然后可以用.htaccess(如果允许)覆盖,最后用PHP
我尝试了以下内容:
在bash中设置环境variables:我将export ENVIRONMENT='local'到我的〜/ .bashrc文件中,重新启动apache,并且没有从print_r($_ENV);得到任何输出print_r($_ENV); (在我的web服务器根目录下的一个简单的index.php文件中)。 我也尝试把ENVIRONMENT='local'放到/ etc / environment中 ,然后重新启动apache,没有任何东西,还有/ etc / bashrc ,重新启动apache。 依然没有。
在httpd.conf中设置环境variables:我将SetEnv ENVIRONMENT 'local-httpd到我的/etc/apache2/httpd.conf文件的末尾(但在加载其他conf文件之前,比如虚拟主机[ Include /private/etc/apache2/other/*.conf ])。 我现在看到数组print_r($_SERVER);的variablesprint_r($_SERVER); 但不是print_r($_ENV); 。
在httpd-vhosts.conf中设置环境variables:我在我的通用指令中添加了SetEnv SetEnv ENVIRONMENT 'local-vhost到我的/etc/apache2/extra/httpd-vhosts.conf文件,该指令指向了我的默认文档根目录。 我现在看到variables已被覆盖(local-vhost从local-httpd,所以我知道variables正在设置)。
在php.ini中设置环境variables:当search一个合适的位置来放置我的环境variables时,我注意到variables_order = "GPCS"被设置为生产值而不是EGPCS 。 我改变了它,重新启动我的服务器,发现我现在得到了print_r($_ENV);输出print_r($_ENV); 但不是我预期的自定义variables。 它也似乎我无法在此文件中设置自定义variables。 请告诉我,如果我错了
在.htaccess中设置环境variables:我添加了SetEnv ENVIRONMENT 'local-htaccess' 。 这按预期工作,覆盖设置的所有其他值。
在PHP中设置/覆盖环境variables:
如果(...){
运行putenv( '环境=本地');
}
我问这个问题,因为我有很多本地和远程testing服务器,其中一些可能允许或不允许我修改httpd,httpd-vhost,php.ini或环境variables。 我想了解什么是最好的这些差异情况(共享主机,heroku,本地服务器等)
我显然不知道如何在bash中正确设置环境variables的方式,PHP可以使用它,我想知道如何做到这一点(因为我认为Heroku做类似的Heroku heroku config set... )
通常Apache使用用户www-data,这意味着你不必修改〜/ .bashrc而是/var/www/.bashrc。
因为:
$ ~www-data -bash: /var/www: Is a directory