52

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?

BinaryButterfly
  • 18,137
  • 13
  • 50
  • 91

4 Answers4

49

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.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.

Envy
  • 510
  • 6
  • 19
Gordon
  • 312,688
  • 75
  • 539
  • 559
  • 3
    One thing to note though for people still reading this answer: Using the alternative method will only work for scripts that are executed through a url, command line scripts (for example cron), will not know what the $_SERVER['SERVER_NAME'] is, so will default to 'production'. Use vhosts setup to be sure. – Zak Henry Oct 14 '13 at 22:40
  • what do i have to activate here? any speacial mod. i tried using SetEnv in the parents directory __.htaccess__ file and in the __site-enable__ file. still getenv gives me `bool(false)`. compaird to a other server, where this is working fine, i can't find any different – yellowsir Oct 23 '15 at 14:17
  • @yellowsir check whether the webserver allow htaccess per dir and make sure to restart apache when you set this in a global conf. – Gordon Oct 23 '15 at 15:23
  • @gordon thx for your response, i did both several times the first one is done by enabeling AllowOverride right? ``` [...] SetEnv APPLICATION_ENV production DocumentRoot /var/www [...] ``` – yellowsir Oct 23 '15 at 18:57
14

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
  • 395,085
  • 80
  • 655
  • 663
2

you can also access it from the $_SERVER variable.

ρяσѕρєя K
  • 132,198
  • 53
  • 198
  • 213
0

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.

Ryan K
  • 3,985
  • 4
  • 39
  • 42
  • I don't get it. There is no "export" directive in Apache httpd. Also, how do you access the other variables you just set in PHP? Perhaps you didn't understand the question, or else I'm missing something. – David Spector Sep 06 '18 at 14:01
  • it init script. /etc/init.d/httpd is a bash shell script. – Firman Syah Sep 06 '18 at 21:31