2010-02-28 1353 views
5

No creo que el uso de archivos .ini o .xml sea una buena idea con proyectos de alto tráfico porque cada carga de página provoca el análisis de archivos config.ini o .xml.(Zend Framework> Zend_Config) ¿Cómo evitar el uso de la configuración .ini o .xml?

¿Hay alguna manera de reemplazar el uso de .ini/.xml con regular php array como config? miradas ini Ahora php así ...

[production] 
phpSettings.display_startup_errors = 0 
phpSettings.display_errors = 0 
phpSettings.date.timezone = "Europe/London" 
includePaths.library = APPLICATION_PATH "/../library" 
bootstrap.path = APPLICATION_PATH "/Bootstrap.php" 
bootstrap.class = "Bootstrap" 
appnamespace = "Application" 
resources.frontController.controllerDirectory = APPLICATION_PATH "/controllers" 
resources.frontController.params.displayExceptions = 0 
resources.db.adapter = PDO_MYSQL 
resources.db.params.host = localhost 
resources.db.params.username = rob 
resources.db.params.password = 123456 
resources.db.params.dbname = zf-tutorial 
resources.layout.layoutPath = APPLICATION_PATH "/layouts/scripts/" 
resources.view.doctype = "XHTML1_STRICT" 

[staging : production] 

[testing : production] 
phpSettings.display_startup_errors = 1 
phpSettings.display_errors = 1 

[development : production] 
phpSettings.display_startup_errors = 1 
phpSettings.display_errors = 1 
resources.frontController.params.displayExceptions = 1 

Quiero algo como esto ...

<?php 

$config = array(
    'production' => array(
     ['phpSettings.display_startup_errors'] => 0, 
     ['phpSettings.display_errors'] => 0, 
    ), 
); 

¿Es posible? ¿Qué debo hacer y cómo debo decirle a la aplicación que use mi propia Config.php?

Gracias y lo siento por mi inglés.

UPD: Creo que pasar matriz al constructor Zend_Application es una forma correcta?

Respuesta

8

Sí, puede usar una matriz para inicializar los datos para un objeto Zend_Config; echar un vistazo a this page of the Zend Framework manual(citando lo que está cerca de Ejemplo # 1):

Normalmente se espera que los usuarios usarían una de las clases de adaptador como Zend_Config_Ini o Zend_Config_Xml, pero si la configuración los datos están disponibles en una matriz PHP, uno puede simplemente pasar los datos al constructor Zend_Config para utilizar una interfaz orientada a objetos simple


También debe echar un vistazo a Ejemplo # 2 en the same page(citando lo que está cerca de ella):

A menudo es deseable usar un archivo de configuración basado en PHP pura . El siguiente código ilustra la facilidad esto se puede lograr

Básicamente, primero debe crear un archivo PHP que contiene la configuración:

// config.php 
return array(
    ... 
    ... 
); 

Y, entonces, de otro archivo, usar que el archivo de configuración :

$config = new Zend_Config(require 'config.php'); 


Pero tenga en cuenta que haciendo eso, si no se pierden la capacidad de modificar fácilmente la configuración, escribiéndola de nuevo en el archivo .ini - que, dependiendo de su situación, podría eventualmente (o no) ser un problema.

Una solución que se podría utilizar es para almacenar en caché los datos Zend_Config:

  • leer desde el archivo .ini
  • tienda a algún MECANISMO almacenamiento en caché
  • Y, por las siguientes páginas, cargarlo desde la memoria caché, en lugar de volver a analizar el archivo .ini.
+1

"Y, para las páginas siguientes, cárguelo de la memoria caché, en lugar de volver a analizar el archivo .ini". - Almacenaré datos almacenados en caché en algo así como texto serializado y debería volver a digitalizarlo una vez más. No es una cura El uso de arreglos php es la única manera de acelerar las configuraciones de carga. Sí, no podría escribir en config, pero está bien para mi situación. Gracias por su respuesta. – Kirzilla

+0

De nada :-) ;;; Si no necesita escribir en el archivo de configuración, entonces, supongo que almacenarlo en un archivo '.php' estará bien :-) ;;; Acerca del almacenamiento en caché y la deserialización: debe ser mucho más rápido que analizar un archivo '.ini' /' .xml': deserializará un objeto ya existente, en lugar de volver a crearlo desde cero * (como lo está haciendo) cuando la configuración se almacena en un archivo '.php') * –

+0

O puede usar sth. como Memcached;) Eso no requerirá serialización, ¿o sí? –

1

Un mejor método sería almacenar en caché el resultado de analizar php.ini. Pero no creo que esto realmente te esté causando ningún problema.

+1

Me parece que es imposible almacenar en caché el análisis de php.ini. Puedo almacenar en caché datos serializados, pero tendré que volver a serializarlos cada vez más. – Kirzilla

1

Lo mejor es almacenarlo en caché con al menos APC o cualquier caché de código de operación, el archivo de configuración .ini con Zend_Config es muy extenso en la CPU, especialmente cuando se usa toArray().

Cuestiones relacionadas