Domanda

Sto creando un framework in PHP e ho bisogno di avere alcuni file di configurazione. Alcuni di questi file avranno inevitabilmente un gran numero di voci.

Quale formato sarebbe il migliore per questi file di configurazione?

Ecco la mia quantificazione dei migliori:

  1. Facilmente analizzato da PHP. Sarebbe bello se non dovessi scrivere alcun codice di analisi ma questo non è un problema.
  2. Resta facilmente letto dagli umani anche quando ci sono molte voci
  3. È uno standard ampiamente utilizzato, senza formati personalizzati
  4. La succinta è apprezzata

Ho iniziato a utilizzare XML, ma ho rinunciato rapidamente per ovvie ragioni. Ho pensato a JSON e YAML ma volevo vedere cos'altro c'è là fuori.

È stato utile?

Soluzione

Che ne dici di un formato di file INI? È di fatto uno standard per i file di configurazione e PHP ha un parser integrato per quel formato:

parse_ini_file

Altri suggerimenti

YAML è una buona opzione: http://www.yaml.org/

È anche molto semplice e potente

I progetti Ruby lo usano molto per la configurazione.

Perché non usi un file PHP per la configurazione?

I vantaggi sono chiari:

  • possibili errori verranno colti automaticamente
  • non è necessario utilizzare / creare un parser personalizzato
  • è ampiamente compreso dai programmatori PHP
  • puoi avere una logica personalizzata, ad esempio usando configurazioni personalizzate per lo sviluppo, altre per la produzione, ecc.

Altri framework come Django e Rails usano un file di configurazione che è uno script.

Un'altra opzione sarebbe quella di utilizzare JSON e utilizzare json_encode e json_decode .

Saresti in grado di utilizzare strutture dati più ricche nei tuoi parametri di configurazione.

Personalmente mi piace fare i dati di configurazione in una classe.

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

quindi per usarli tutto ciò che devi fare è

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

per cambiare la configurazione tutto ciò che devi fare è leggere il file con la classe in essa uso una funzione come questa:

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);
 }
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top