I like how this works in Zend Framework. I can know which environment I\'m currently using by checking APPLICATION_ENV constant in my controller.
I had the same problem then I solved it. The way to solve the problem is to declare all variables in an apache init script.
I'm using apache on centos and the init script is located in /etc/init.d/httpd
Add this code, but change it to meet your specific case.
ORACLE_HOSTNAME=ora11g.home.com; export ORACLE_HOSTNAME
ORACLE_BASE=/u01/app/oracle; export ORACLE_BASE
ORACLE_HOME=$ORACLE_BASE/product/11.2.0/db_1; export ORACLE_HOME
ORACLE_SID=ora11g; export ORACLE_SID
ORACLE_TERM=xterm; export ORACLE_TERM
PATH=$ORACLE_HOME/bin:/usr/sbin:$PATH; export PATH
LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib;
export LD_LIBRARY_PATH
CLASSPATH=$ORACLE_HOME/JRE:$ORACLE_HOME/jlib:$ORACLE_HOME/rdbms/jlib;
export CLASSPATH
This solved my problem. I hope this helps.
Since SetEnv set's the value to Apache's environment, you can get it with
or just
If you look at public/index.php
in a ZF project, you will see ZF uses getenv
:
// Define application environment
defined('APPLICATION_ENV')
|| define('APPLICATION_ENV', (getenv('APPLICATION_ENV') ?
getenv('APPLICATION_ENV') :
'production'));
An often use alternative would be to read the Hostname from PHP and define the constant accordingly:
if(!defined('APPLICATION_ENV')) {
if(FALSE === stripos($_SERVER['SERVER_NAME'], 'www.yourdomain.com')) {
define(APPLICATION_ENV, 'development');
} else {
define(APPLICATION_ENV, 'production');
}
}
This way, you don't have to rely on the environment setting at all.
SetEnv defines an environment variable.
Once this has been set (either in your Apache's configuration, or at the system level), you can read its value using the getenv function :
echo getenv('APPLICATION_ENV');
For instance, if you use this in your .htaccess
file :
SetEnv TEST glop
You can use this portion of PHP code :
var_dump(getenv('TEST'));
And you'll get :
string 'glop' (length=4)
you can also access it from the $_SERVER
variable.