Question

Je crée un framework en PHP et il me faut quelques fichiers de configuration. Certains de ces fichiers contiendront inévitablement un grand nombre d'entrées.

Quel format serait le meilleur pour ces fichiers de configuration?

Voici ma quantification du meilleur:

  1. Facilement analysé par PHP. Ce serait bien si je n’avais pas à écrire de code d’analyse mais ce n’est pas un briseur d’accord.
  2. Reste facilement lisible par les humains même lorsqu'il y a une grande quantité d'entrées
  3. Est une norme largement utilisée, aucun format personnalisé
  4. La succincte est appréciée

J'ai commencé par utiliser XML, mais j'ai rapidement abandonné pour des raisons évidentes. J'ai pensé à JSON et à YAML, mais je voulais voir ce qu'il y avait d'autre.

Était-ce utile?

La solution

Que diriez-vous d'un format de fichier INI? C'est un standard de fichier de configuration, et PHP a un analyseur intégré pour ce format:

parse_ini_file

Autres conseils

YAML est une bonne option: http://www.yaml.org/

C'est très simple et puissant aussi

Les projets Ruby l'utilisent beaucoup pour la configuration.

Pourquoi ne pas utiliser un fichier PHP pour la configuration?

Les avantages sont clairs:

  • les erreurs possibles seront automatiquement détectées
  • pas besoin d'utiliser / créer un analyseur personnalisé
  • il est largement compris par les programmeurs PHP
  • vous pouvez avoir une logique personnalisée, par exemple en utilisant des configurations personnalisées pour le développement, d'autres pour la production, etc.

D'autres frameworks tels que Django et rails utilisent un fichier de configuration qui est un script.

Une autre option serait d'utiliser JSON et d'utiliser json_encode et json_decode .

Vous pourrez utiliser des structures de données plus riches dans vos paramètres de configuration.

Personnellement, j'aime bien configurer les données dans une classe.

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

alors pour les utiliser tout ce que vous avez à faire est

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

pour changer la configuration, tout ce que vous avez à faire est de lire le fichier contenant la classe. J'utilise une fonction comme celle-ci:

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);
 }
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top