Me gusta cómo funciona esto en Zend Framework. Puedo conocer el ambiente que estoy utilizando actualmente, mediante la comprobación de APPLICATION_ENV constante en mi controlador.

<VirtualHost *:80>
    #ServerName 
    #DocumentRoot

        SetEnv APPLICATION_ENV "development"

    # Directory
</VirtualHost>

Pero por desgracia no se pueden utilizar las ZF en mi proyecto actual. ¿Cómo puedo verificar esta variable de entorno en mi código PHP?

4 Comentarios

  1. 47

    Desde SetEnv establecer el valor de Apache medio ambiente, que se puede conseguir con

    o simplemente

    • getenv — Obtiene el valor de una variable de entorno

    Si usted mira public/index.php en una ZF de proyecto, usted verá ZF utiliza getenv:

    //Define application environment
    defined('APPLICATION_ENV')
        || define('APPLICATION_ENV', (getenv('APPLICATION_ENV') ? 
                                      getenv('APPLICATION_ENV') : 
                                      'production'));

    A menudo una alternativa de uso sería leer el nombre de host de PHP y definir la constante en consecuencia:

    if(!defined('APPLICATION_ENV')) {
        if(FALSE === stripos($_SERVER['SERVER_NAME'], 'www.yourdomain.com')) {
            define(APPLICATION_ENV, 'development');
        } else {
            define(APPLICATION_ENV, 'production');
        }
    }

    De esta manera, usted no tiene que depender de la configuración del entorno en absoluto.

    • Una cosa a tener en cuenta, aunque para la gente que aún la lectura de esta respuesta: Utilizando el método alternativo sólo funcionará para los scripts que son ejecutados a través de una url, de la línea de comandos de secuencias de comandos (por ejemplo cron), no saben lo que es el $_SERVER[‘SERVER_NAME’] es, así será la predeterminada para la «producción». Uso vhosts de instalación para asegurarse de que.
    • ¿qué tengo que activar aquí? cualquier speacial mod. he intentado utilizar SetEnv en los padres directorio .htaccess de archivo y en la sitio web-enable de archivo. todavía getenv me da bool(false). compaird a un servidor, donde este está funcionando bien, no puedo encontrar ningún diferentes
    • compruebe si el servidor web permiten htaccess por dir y asegúrese de reiniciar apache cuando se establece este en un mundial conf.
    • thx por tu respuesta, hice varias veces, la primera por enabeling AllowOverride derecho? « <VirtualHost *:80> […] SetEnv APPLICATION_ENV producción DocumentRoot /var/www […] </VirtualHost> «
    • se ve bien para mí. Lo siento. Ni idea entonces.
  2. 11

    SetEnv define una variable de entorno.

    Una vez que esto se ha hecho (ya sea en tu Apache configuración, o en el nivel de sistema), puedes leer su valor mediante la getenv función :

    echo getenv('APPLICATION_ENV');


    Por ejemplo, si uso esta en su .htaccess de archivo :

    SetEnv TEST glop

    Puede utilizar esta porción de código PHP :

    var_dump(getenv('TEST'));

    Y obtendrás :

    string 'glop' (length=4)
  3. 0

    Tuve el mismo problema, a continuación, lo resuelto. La manera de resolver el problema es declarar todas las variables en un apache script de init.

    Estoy usando apache en centos y el script de inicio se encuentra en /etc/init.d/httpd

    Agregar este código, pero cambiar para satisfacer su caso específico.

    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

    Esta solucionado mi problema. Espero que esto ayude.

    • No lo entiendo. No hay una «exportación» de la directiva de Apache httpd. También, ¿cómo acceder a las otras variables que acaba de establecer en PHP? Tal vez usted no entiende la pregunta, o me estoy perdiendo algo.
    • se script de init. /etc/init.d/httpd es un shell de bash script.
  4. 0

    también se puede acceder a ella desde la $_SERVER variable.

    • Agregar un poco de explicación con la respuesta de cómo responder a ayudar a OP en la fijación de la edición actual

Dejar respuesta

Please enter your comment!
Please enter your name here