2011-03-27 8 views
24

Tengo lo siguiente en mi htaccess.SetEnv APPLICATION_ENV desarrollo - .htaccess interactuando con Zend Framework?

SetEnv APPLICATION_ENV development 

Cuando paso a este archivo prodution, voy a cambiarlo a:

SetEnv APPLICATION_ENV production 

Este

desarrollo

y

producción

se establecen en Zend Framework application.ini correcta?

¿Cómo se comunican Zend y Apache aquí? ¿Cómo sabe Zend acerca de la instrucción htaccess?

Gracias.

+0

¡Buena idea, eso! Nunca he visto esto antes. –

+0

Oh, bueno, los créditos van al autor del libro que estoy leyendo. :) W.J. Gilmore. Pero este "cómo" fue omitido. :) – MEM

Respuesta

39

SetEnv, utilizado en la configuración de Apache (ya sea un archivo .htaccess o VirtualHost), define una variable de entorno.

Desde PHP, puede leer las variables de entorno, ya sea:


echar un vistazo a lo dado en index.phpZend Frameworks QuickStart, verá que utiliza la variable de entorno definir la constante de PHP llamada APPLICATION_ENV:

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

Y esa constante se usa más adelante para inicializar la aplicación:

// Create application, bootstrap, and run 
$application = new Zend_Application(
    APPLICATION_ENV, 
    APPLICATION_PATH . '/configs/application.ini' 
); 
+3

'APPLICATION_ENV' se usa para cargar la sección correcta de su archivo de configuración * (o alguna sección de código PHP) * - en el que habilita * (o no) * la visualización de errores. –

+0

Muchas gracias. :) Saludos a los dos. – MEM

9

El flujo de comunicación, como usted lo llama, es el followoing:

Si utiliza la producción

SetEnv APPLICATION_ENV

en su .htaccess, el medio ambiente se establecer allí, será utilizado. ¿Por qué?

El siguiente fragmento de código de su index.php no define la constante, si ya se ha definido, cual es el caso, si usa SetEnv en su .htaccess.

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

Si su .htaccess no define la constante, se usará el valor proporcionado en index.php. Si yo fuera tú, aún así lo mantendría sincronizado. Debido a que puede cometer errores como olvidar establecer AllowOverride para su vhost que daría lugar a una situación en la que el index.php configura el entorno aunque el .htaccess esté presente.

+0

Tomaré eso en consideración, pero no será fácil hacerlo. Estoy tratando de automatizar el proceso usando capistrano. En este momento, he creado una tarea allí, que reemplazará htaccessA por htaccessB que está en una carpeta de "producción". Los archivos htaccess no se pueden cambiar tan a menudo como nuestro archivo index.php, así que podría confiar en esto ... – MEM

+1

En general, me parece una buena idea definir el entorno en .htaccess, solo asegúrese de que el entorno predeterminado en index.php es el más seguro (que sería producción) en caso de que haya un problema con .htaccess. Tal vez también podría reescribir index.php de forma que la aplicación arroje un error, si el entorno no ha sido establecido por .htaccess. – markus