How to use getenv() in php and SetEnv in a .htaccess with a compiled php-cgi on a shared host
Solution 1
Ok I finally got it. On dreamhost, it is possible to use fastcgi and therefore declare environment variables with it. It consists of just adding this simple script
#!/bin/sh
export PHP_FCGI_CHILDREN=2
exec /home/USERNAME/YOURDOMAIN/cgi-bin/php.cgi
Which is where my compiled PHP5.3.1 was located. chmod 744 on that file called dispatch.fcgi which will be allowed more memory by dreamhost's watchdog.
After that I added to my domain's .htaccess the following:
Options +ExecCGI
AddHandler fastcgi-script fcg fcgi fpl
AddHandler php5-fastcgi .php
Action php5-fastcgi /dispatch.fcgi
now in the application's root I have another .htaccess with:
SetEnv APPLICATION_ENVIRONMENT staging
In a php script is is retrievable via getenv('REDIRECT_APPLICATION_ENVIRONMENT');
Solution 2
For the SetEnv
directive to work, your hosting service must have the mod_env
module activated...
But, even if it's activated, maybe you don't have to permission to use SetEnv
.
Just to be sure the problem is not in your code, you might want to check the ouput of phpinfo()
: at the bottom of the page, there should be a section containing environment variables as seen from PHP -- if yours is not in there, it's not a good sign for you...
Steven Rosato
Updated on May 30, 2020Comments
-
Steven Rosato about 4 years
Just putting in context to clarify the main question:
On my development machine, PHP5.3.1 is installed on Apache as a module, I use SetEnv APPLICATION_ENVIRONMENT development in my application's root .htaccess file. It is then easily retrievable from any php script with getenv('APPLICATION_ENVIRONMENT').
On the production server, on a sharedhost (dreamhost), I compiled myself php5.3.1 since it was not directly supported. Everything works fine except that getenv('APPLICATION_ENVIRONMENT') returns false.
In the sharedhost root .htaccess for my domain, I use this .htaccess file
Options +ExecCGI AddHandler php-cgi .php Action php-cgi /cgi-bin/php.cgi <FilesMatch "^php5?\.(ini|cgi)$"> Order Deny,Allow Deny from All Allow from env=REDIRECT_STATUS </FilesMatch> Options -indexes
php5.cgi resides in /cgi-bin and works very well. Of course in my application's root folder I have another .htaccess defining:
SetEnv APPLICATION_ENVIRONMENT production
But when using getenv('APPLICATION_ENVIRONMENT') it returns false, any idea how to resolve this?
-
Steven Rosato over 14 yearsYep you are right, I am not finding anything under PHP variables under the production server and I do on my development machine. I am contacting their support for this and will try to provide a workaround answer.
-
Evan Mattson over 10 yearsoh thank you!!! I was losing hair trying to set an environment variable in .htaccess. I was able to finally do it by changing PHP from running as a CGI application to FastCGI.
-
Erin Geyer about 10 yearsWhy are you using getenv('REDIRECT_APPLICATION_ENVIRONMENT') instead of getenv('APPLICATION_ENVIRONMENT') ?
-
Erin Geyer about 10 yearsFor this to work for me, I had to leave off the prepended "REDIRECT_" part of the environment variable.
-
Garry over 6 years+1 Had an issue with Magento 1.5 setting environment variables with SetEnvIf Host. The variables MAGE_RUN_CODE and MAGE_RUN_TYPE were being set in the PHP super global $_SERVER as REDIRECT_MAGE_RUN_CODE and REDIRECT_MAGE_RUN_TYPE. This answer got me looking in the right direction.