2009-08-07 12 views
10

Necesito un buen formato de archivo de configuración. Planeo poner en el esquema de la mesa. Como Symfony, Ruby on Rails, etc. ¿Cuál es el mejor formato de archivo para el archivo de configuración? Archivo codificado Yaml o XML o JSON? ¿Cuál es el mejor para este propósito?¿Cuál es el mejor formato de archivo para el archivo de configuración?

+0

te conocen que si acepta más preguntas, se obtiene más rep, ¿verdad? –

Respuesta

13

Como han indicado otros, usted tiene un montón de opciones. Simplemente no invente (es decir, escriba analizadores sintácticos) tal cosa a menos que tenga una razón realmente buena para hacerlo (no se puede pensar en ninguno).Sólo evaluar sus opciones:

  • ¿Es necesario acceder a estos datos en cualquier lugar fuera de mi solicitud (con otro idioma)
  • ¿Quieres usuarios (o usted mismo) para poder editar el archivo con un editor de texto simple
  • ¿necesita compatibilidad con versiones anteriores de la lengua utilizada

Por ejemplo, PHP proporciona serializar muy fácil() y unserialize() funciones. El formato, sin embargo, no es tan fácil de leer/editar por los humanos (XML también puede ser difícil de leer, pero no tan difícil como el formato PHP. El módulo de escaneo de Python es aún peor). Si alguna vez necesita acceder a datos en otros idiomas, esta es una mala elección. Y piense en los demás: recientemente he analizado los datos serializados de PHP del proyecto Horde en un proyecto python mío. JSON es una opción mucho mejor porque es legible por los humanos (si es "bastante impresa", no compactada), editable por los humanos y todos los lenguajes principales tienen soporte JSON hoy en día. Sin embargo, perderá la compatibilidad con versiones anteriores, p. con python, JSON requiere la versión 2.6+.

+1

No estoy de acuerdo con una parte de la respuesta: ¿cómo es que el ser humano no puede leer/editar fácilmente XML? Esa es una de sus grandes ventajas. (Es más detallado que JSON, y nada de malo con JSON) – ViennaMike

+1

Bueno, tienes razón en que es mucho más legible que el formato de serialización de PHP o el encurtido de pitones. Pero también es extremadamente detallado, lo cual me resulta molesto cuando leo y es engorroso cuando escribo. Hay una categoría completa de software llamada "editores XML" por una razón;) – c089

+0

Cambié la respuesta para que dijera "no tan fácilmente". – c089

1

¿Qué piensas poner ahí?

Usted tiene un montón de opciones:

  • XML con etiquetas personalizadas
  • pares de valores clave en cada nueva línea
  • SQLite?
+1

No recomendaría SQLite como configuración, ya que necesitará una herramienta de cliente SQLite para configurar su aplicación y también deberá estar familiarizado con las consultas SQL. – RaYell

13

*.ini debe ser bastante bueno para que

[MyApp] 
var1 = "foo" 
var2 = "bar" 

[MyPlugin] 
var1 = "qwe" 

Usted puede leer fácilmente usando parse_ini_file()

$config = parse_ini_file('/path/to/config/file', true); 
echo $config['MyApp']['var2']; 
+0

Gran respuesta. Especialmente si el alcance del idioma a largo plazo se mantiene como PHP. Utilizo archivos .ini todo el tiempo como mis "palancas y perillas de control" en mis aplicaciones. – pimbrouwers

+0

¿Ini admite cadenas multilíneas? – starbeamrainbowlabs

2

XML es mejor para este propósito ya que la mayoría de programación langauge API privide para leer archivos XML .

+9

XML es doloroso de mantener. –

+2

... ¡y XML es lento! – Marecky

+0

xml es creado por el diablo .. – slier

0

Joomla cambió recientemente de archivos ini a archivos codificados JSON. La codificación y decodificación de json usando json_encode() y json_decode() tiene un mejor rendimiento que la lectura y escritura de archivos ini.

Sin embargo, hay un inconveniente: json no es fácilmente legible por humanos. Necesita usar un script php para codificar su archivo de configuración. Puede utilizar esta solución bien cuando desee escribir su configuración en una parte del administrador de su sitio web.

+5

Yo diría que JSON es bastante legible para los humanos (a diferencia del formato de serialización PHP estándar). –

3

JSON es una buena opción, en mi opinión. Se podría definir el esquema de base de datos como por ejemplo:

{ 
    table1: { 
     id: { 
      type:"int", 
      autoincrement:true 
     }, 
     some_field: { 
      type:"string", 
     } 
    }, 
    table2: { // etc 
    } 
} 

Entonces sólo tiene que utilizar json_decode a convertir esto en una matriz PHP.

p. Ej.

$tables = json_decode($json_text); 
foreach ($tables as $tablename => $t) { 
    foreach ($t as $fieldname => $field) { 
     echo "Table {$tablename} has a record called {$fieldname}"; 
    } 
} 

Esto impresión: Table table1 has a record called id Table table1 has a record called some_field

JSON es mucho más fácil de trabajar que el XML en mi opinión, y json_encode/decodificación es muy rápido por lo que hay poca sobrecarga. En mi opinión, también es mucho más legible que XML y se maneja mejor con estructuras de datos complejas que los archivos INI. Algunas personas prefieren YAML, pero en realidad no hay mucha diferencia en la sintaxis.

1

mi preferencia es

  1. archivo php bien documentado
  2. base de datos para la configuración específica del usuario

al igual que otras aplicaciones php wordpress y un sinnúmero utilizan

0

Los chicos realmente se han dado buenas respuestas ya. Personalmente, me gustan los archivos .ini fuera de la raíz del documento. También asegúrese (si está en un entorno de alojamiento de Linux) de que su archivo solo es legible por su servidor web y no se puede escribir.

Luego puede simplemente analizar el archivo INI y usar su configuración de configuración de esa manera. (Esto es si está usando un lenguaje como PHP o más, JavaScript ect no funcionará aquí.)

Pero es como dijeron. Todo depende de qué datos desee tener en su archivo de configuración y qué desea hacer con él.

Saludos Conrad c '',)

Cuestiones relacionadas