Set Application_ENV via virtual host config and read this in PHP

后端 未结 4 1586
北海茫月
北海茫月 2020-12-05 01: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.



        
相关标签:
4条回答
  • 2020-12-05 02:06

    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.

    0 讨论(0)
  • 2020-12-05 02:22

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

    • apache_getenv — Get an Apache subprocess_env variable

    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.

    0 讨论(0)
  • 2020-12-05 02:24

    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)
    
    0 讨论(0)
  • 2020-12-05 02:27

    you can also access it from the $_SERVER variable.

    0 讨论(0)
提交回复
热议问题