views:

403

answers:

2

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.

<VirtualHost *:80>
    #ServerName 
    #DocumentRoot

        SetEnv APPLICATION_ENV "development"

    # Directory
</VirtualHost>

But unfortunately I can't use ZF in my current project. How can I check this environment variable in my PHP code?

+3  A: 

Since SetEnv set's the value to Apache's environment, you can get it with

or just

  • getenv — Gets the value of an environment variable

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.example.com') {
        define(APPLICATION_ENV, 'development');
    } else {
        define(APPLICATION_ENV, 'production');
    }
}

This way, you don't have to rely on the environment setting at all.

Gordon
+1  A: 

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)
Pascal MARTIN
sorry, but Gordon was first.
Fedyashev Nikita
No problem about that :-) ;; Just note that `apache_getenv` will only work with Apache, though -- and not for command-line scripts, for instance.
Pascal MARTIN
@Pascal I wasn't done yet :D See now.
Gordon
@Gordon : much better ;-)
Pascal MARTIN