2009-04-28 17 views
10

Tengo una aplicación escrita en PHP, y hay una serie de variables configurables. Estamos implementando una función en la que el usuario puede crear conjuntos de configuraciones y cambiar fácilmente entre ellas. ¿Cómo debo almacenar mis configuraciones? como XML? en un archivo .ini? en múltiples archivos .ini? en un db?cómo almacenar configuraciones para la aplicación php - xml o ini o db

¿Qué le proporcionará la mayor flexibilidad si agregamos campos más adelante? ¿Conveniencia de codificación?

Si utilizo una base de datos, tendré que usar una separada de la principal de la aplicación por razones que no valen la pena, lo que me ha apartado de eso. (Además, estamos usando archivos .mdb para nuestro db.)

He estado yendo por la ruta xml, pero estoy teniendo problemas para agregar y editar configuraciones usando SimpleXML. Además, la aplicación tiene que ser compatible con php 5.1.6, y estoy un poco nervioso acerca de algunas de las funcionalidades.

realidad nunca ocupó de la creación de archivos ini personalizada ....

Una pequeña aclaración: los usuarios no tocarán los archivos - son no-aficionado a la tecnología. Así que nosotros haremos la configuración de los archivos iniciales, pero luego estamos escribiendo una herramienta que va a escribir su configuración (s) al formato que elijamos.

Respuesta

4

Almacenar los ajustes para un DB en un DB diferente no tiene mucho sentido, IMO.

Elegiría un archivo ini, un archivo xml o un archivo php, según lo propuesto por jmucchiello. Cada opción tiene sus pros y sus contras. En cuanto a xml versus ini, xml ofrece más flexibilidad pero es más difícil de mantener (menos legible). Si sus necesidades están cubiertas por ini, quédese con la solución más simple. Use xml solo si necesita más de lo que los archivos ini pueden ofrecerle.

En cuanto a la solución php, calificaría la legibilidad en algún lugar entre ini y xml, pero sería más difícil guardar la configuración actual. Así que por mucho que me guste el enfoque, para su escenario actual no lo recomendaría.

+0

Otro punto que vale la pena mencionar es que un archivo config.php con errores de sintaxis hace que la aplicación falle, algunas veces derramando errores (ya que el archivo de configuración se convierte en parte de la aplicación). El uso de .xml o .ini le permite escribir su código de analizador para recuperar con mayor gracia los errores de sintaxis dentro de la configuración. – codemagician

1

Creo que la respuesta aquí va a depender realmente de su situación individual. Hay casos en que cada uno de estos sería la mejor opción. Para su caso particular, xml probablemente sea el mejor. Pero donde xml realmente brilla sobre un archivo ini es si tiene múltiples opciones relacionadas. Por ejemplo, si necesita aferrarse a la información de conexión para una base de datos que tenga nodos para las diferentes partes de la conexión debajo de un nodo, esa conexión en particular puede ser más fácil de leer y mantener. Realmente depende de los datos.

También diría que sería más fácil trabajar con un archivo xml si solo fuera a extraer un solo valor y no cargar todo el archivo en la memoria al comienzo de la aplicación.

2

En realidad, prefiero un archivo PHP ejecutable para la configuración. Puede hacer muchas cosas en un archivo ejecutable que no puede lograr fácilmente con las otras soluciones. El único gran inconveniente para un archivo ejecutable es que el administrador tiene que ser experto en PHP para editar el archivo de forma segura. PHP también puede describir tipos de datos complejos en su configuración ya que es su código.

DB es un problema porque todavía necesita un archivo de configuración externo para buscar y conectarse a la base de datos.

XML es excesivo para la configuración.

Los archivos INI funcionan y puede usar las bibliotecas PHP ini para leerlos. Ver parse_ini_file(). Los archivos ini no tratan muy bien el tipo de datos complejo.

EDITAR en respuesta a Itay Moav (comentarios no formatear este derecho):

<?php /* my config file */ 

$_CFG = Array(); /* problem solved */ 
$_CFG['key1'] = 'value1'; 
?> 
+1

y corre el riesgo de tener suciedad en su alcance global, y si accidentalmente el registro global está activado, entonces usted tiene una seria amenaza a la seguridad. –

+0

Su configuración probablemente estará en el alcance global pase lo que pase. Es por eso que es la configuración. Y un simple $ _CFG = Array(); en la parte superior del archivo de configuración resuelve el problema register_globals. – jmucchiello

+0

realmente no tenemos que preocuparnos por la seguridad, esto se está compilando en una aplicación ejecutada localmente. – sprugman

5

Me almacenar los elementos configuraciones en un archivo PHP. Este es el método más flexible I que he usado.

$config['website_url'] = 'google.com'; 

entonces tienen la siguiente estructura de archivos

- config/development 
- config/production 

tengo una constante definida temprano en el software llamado IN_PRODUCTION, cuando este es VERDADERO se carga hasta los elementos de configuración de producción y vice versa.

Esto es simple y fácil de mantener.

-Mathew

+2

Tenga en cuenta que si almacena sus variables de configuración en un archivo ini, puede obtener los datos en una matriz asociativa con bastante facilidad. $ config = parse_ini_file ("config.php"); – tj111

+0

Conozco parse_ini_file(), pero ¿cómo puedo escribir una configuración modificada en el archivo? (He visto varias clases y tal en los comentarios en php.net, pero no he encontrado una función nativa que lo haga). – sprugman

+1

He leído en algún lugar que las funciones json_decode y file_get_contents usadas juntas son prácticamente tan rápidas como la función parse_ini_file por sí misma. Lo que me hace preguntarme por qué json no sería una opción más frecuente para almacenar config en php también. Ciertamente es más amigable que xml y más sucinto que ini. Además, json conoce el tipo, es decir, los números decimales se pueden analizar como números en lugar de cadenas. Probablemente podrían llegar a una función parse_json_file que sería aún más rápida en una futura revisión de php. –

0

Me gustaría ir a los archivos ini, Ellos son legibles, que están siendo analizados muy rápido (y si el almacenamiento en caché ....).
Ciertamente no es XML. Menos humano legible, analizado no tan rápido.
No haré DB debido a la velocidad.
No utilizaría PHP vars porque hace que use el ámbito GLOBAL ...

0

Escriba su propia clase de configuración que carga los archivos de configuración. Un buen ejemplo es la forma en que CodeIgniter maneja la configuración.

http://codeigniter.com/user_guide/libraries/config.html

se carga algunos archivos de configuración por defecto o se puede cargar una específica con la clase Config.

Puede descargar el código fuente y echar un vistazo a cómo lo hacen con fines educativos.

Otra opción sería generar un archivo php con una matriz de configuración de la base de datos. Entonces puede administrar todas las opciones y al guardar generar el archivo.

2

vi una publicación con la misma pregunta hace un momento, aquí hay una buena solución en el siguiente enlace. Es una buena práctica para la recopilación de código útil. Supongo. :)

¡Haz clic en iniHandler class para obtener la clase de controlador INI!

+0

sitio web no encontrado – diEcho

Cuestiones relacionadas