order of operations for environment variables
Posted
by
alyda
on Server Fault
See other posts from Server Fault
or by alyda
Published on 2013-10-31T00:33:34Z
Indexed on
2013/10/31
3:57 UTC
Read the original article
Hit count: 525
php
|environment-variables
I want to understand how environment variables are set and reset (overridden). I'm running Apache/2.2.24 (Unix) PHP/5.4.14 on a mac . My theory is this:
Environment vars can be set in bash, then they can be overwritten with httpd.conf preceding a VirtualHost directive that precedes php.ini, which can then be overwritten by .htaccess (if allowable) and finally by PHP
I tried the following:
setting environment variable in bash: I added
export ENVIRONMENT='local'
to my ~/.bashrc file, restarted apache and did not get any output fromprint_r($_ENV);
(in a simple index.php file at the root of my webserver). I also tried puttingENVIRONMENT='local'
into /etc/environment, and restarting apache, nothing, as well as /etc/bashrc, restart apache. still nothing.setting environment variable in httpd.conf: I added
SetEnv ENVIRONMENT 'local-httpd
to the end of my /etc/apache2/httpd.conf file (but before I load other conf files, such as virtual host [Include /private/etc/apache2/other/*.conf
]). I now see the variable in the arrayprint_r($_SERVER);
but notprint_r($_ENV);
.setting environment variable in httpd-vhosts.conf: I added
SetEnv ENVIRONMENT 'local-vhost
to my /etc/apache2/extra/httpd-vhosts.conf file in my generic directive that points to my default document root. I now see the variable has been overwritten (to local-vhost from local-httpd, so I know where the variable is getting set).setting environment variable in php.ini: while searching for a proper place to put my environment variable, I noticed that
variables_order = "GPCS"
was set to the production value rather thanEGPCS
. I changed it, restarted my server and found that I was now getting output forprint_r($_ENV);
but not my expected custom variable. It also appears that I am not able to set a custom variable in this file. Please tell me if I am wrongsetting environment variable in .htaccess: I added
SetEnv ENVIRONMENT 'local-htaccess'
. This worked as expected, overwriting all other values that were set.setting / overwriting environment variable in PHP:
if (...) { putenv('ENVIRONMENT=local'); }
I'm asking this question because I have a lot of local and remote testing servers, some of which may or may not allow me access to modify httpd, httpd-vhost, php.ini or environment variables. I want to understand what is best for those difference scenarios (shared hosting, heroku, local servers, etc)
I obviously don't know how to properly set the environment variable in bash in a way that php can use it, I'd like to know how to do that (as I think Heroku does something similar with heroku config set...
)
© Server Fault or respective owner