Pregunta

Estoy creando un marco en PHP y necesito tener algunos archivos de configuración. Algunos de estos archivos inevitablemente tendrán una gran cantidad de entradas.

¿Qué formato sería el mejor para estos archivos de configuración?

Aquí está mi cuantificación de los mejores:

  1. Analizado fácilmente por PHP. Sería bueno si no tuviera que escribir ningún código de análisis, pero esto no es un factor decisivo.
  2. Sigue siendo fácil de leer por los humanos, incluso cuando hay una gran cantidad de entradas
  3. Es un estándar ampliamente utilizado, sin formatos personalizados
  4. Se aprecia la concisión

Comencé a usar XML, pero rápidamente me di por vencido por razones obvias. He pensado en JSON y YAML pero quería ver qué más hay ahí fuera.

¿Fue útil?

Solución

¿Qué tal un formato de archivo INI? Es un estándar de archivo de configuración de facto, y PHP tiene un analizador incorporado para ese formato:

parse_ini_file

Otros consejos

YAML es una buena opción: http://www.yaml.org/

También es muy simple y poderoso

Los proyectos Ruby lo usan mucho para la configuración.

¿Por qué no utiliza un archivo PHP para la configuración?

Los beneficios son claros:

  • los posibles errores se detectarán automáticamente
  • no es necesario usar / crear un analizador personalizado
  • es ampliamente entendido por los programadores PHP
  • puede tener una lógica personalizada, por ejemplo, utilizando configuraciones personalizadas para el desarrollo, otras para la producción, etc.

Otros frameworks como Django y rails usan un archivo de configuración que es un script.

Otra opción sería usar JSON y usar json_encode y json_decode .

Podría utilizar estructuras de datos más ricas en sus parámetros de configuración.

Personalmente, me gusta hacer datos de configuración en una clase.

class appNameConfig {
    var $dbHost = 'localhost';
    var $dbUser = 'root';
    //...
 }

entonces para usarlos todo lo que tienes que hacer es

$config = new appNameConfig;
mysql_connect($config->dbHost, $config->dbUser, $config->dbPassword) or die(/*...*/);

para cambiar la configuración, todo lo que tiene que hacer es leer el archivo con la clase en ella. Utilizo una función como esta:

function updateConfig($parameter, $value) {
    $fh = fopen('config.php', 'w+');
    while(!feof($fh)) {
        $file .= fgets($fh);
     }
    $fileLines = explode("\n", $file);
    for($i=0;$i<count($fileLines);$i++) {
        if(strstr($fileLines[$i], $parameter)) {
            $fileLines[$i] = "<*>quot; . $parameter . " = '" . $value . "'";
         }
     }
    $file = implode("\n", $fileLines);
    fwrite($fh, $file);
    fclose($fh);
 }
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top