2010-03-04 21 views
40

Me gusta cómo funciona esto en Zend Framework. Puedo saber qué entorno estoy usando al verificar la constante APPLICATION_ENV en mi controlador.Establezca Application_ENV a través de la configuración de host virtual y léelo en PHP

<VirtualHost *:80> 
    #ServerName 
    #DocumentRoot 

     SetEnv APPLICATION_ENV "development" 

    # Directory 
</VirtualHost> 

Pero desafortunadamente no puedo usar ZF en mi proyecto actual. ¿Cómo puedo verificar esta variable de entorno en mi código PHP?

Respuesta

39

Desde SetEnv conjunto es el valor al entorno de Apache, puede conseguirlo con

o simplemente

  • getenv - Obtiene el valor de una variable de entorno

Si nos fijamos en public/index.php en un proyecto ZF, verá ZF utiliza getenv:

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

Una menudo utilizan alternativa sería la de 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 forma, no tiene que depender en absoluto de la configuración de entorno.

+3

Una cosa que se debe tener en cuenta para las personas que siguen leyendo esta respuesta: Usar el método alternativo solo funcionará para scripts que se ejecutan a través de una url, scripts de línea de comandos (por ejemplo cron), no sabrán qué $ _SERVER ['SERVER_NAME '] es, por lo que se usará de manera predeterminada' producción '. Use la configuración de vhosts para estar seguro. –

+0

¿Qué debo activar aquí? cualquier mod speacial Intenté usar SetEnv en el directorio de padres __. htaccess__ file y en el archivo __site-enable__. todavía getenv me da 'bool (falso)'. compaird a otro servidor, donde esto funciona bien, no puedo encontrar – yellowsir

+0

@yellowsir diferente, compruebe si el servidor web permite htaccess por dir y asegúrese de reiniciar Apache cuando configure esto en una configuración global. – Gordon

10

SetEnv define una variable de entorno.

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

echo getenv('APPLICATION_ENV'); 


Por ejemplo, si utiliza esto en su .htaccess archivo:

SetEnv TEST glop 

se puede utilizar esta porción de código PHP:

var_dump(getenv('TEST')); 

Y obtendrá:

string 'glop' (length=4) 
0

he tenido el mismo problema, entonces lo resolví. La forma de resolver el problema es declarar todas las variables en un script de inicio apache.

estoy usando Apache en CentOS y el guión de inicio se encuentra en /etc/init.d/httpd

añadir este código, pero el cambio es 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 

Esto resolvió mi problema. Espero que esto ayude.

0

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

+0

Agregue una explicación con la respuesta de cómo esta respuesta ayuda a OP a corregir el problema actual –

Cuestiones relacionadas