|
Où mettre les variables de configuration
|
|
Table des matières
Où mettre les variables de configurationSouvent dans un jeu, on peut vouloir stocker des éléments de configuration constants. Les identifiants d'accès à la base de données, le nombre de joueurs maximum par univers, le nombre d'invitation que le joueur peut envoyer à des amis, etc. Passons en revue quelques moyens de stocker ces informations ainsi que les avantages et inconvénients de chacun. Les exemples de codes sont données pour PHP. Tableau déclaré à même le code sourceCette solution consiste à créer directement un tableau associatif dans le code source de l'application. $configuration = array( 'players_per_universe' => 50, 'supported_languages' => array('EN', 'FR'), 'database' => array( 'username' => 'root', 'password' => 'jambon fumé', 'host' => 'localhost', 'database' => 'my_game' ) ); Avantages
Inconvénients
Tableau retourné par un fichier inclusCela consiste à retourner un tableau associatif depuis un script PHP inclus. Fichier configuration.include.php : return array( 'players_per_universe' => 50, 'supported_languages' => array('EN', 'FR'), 'database' => array( 'username' => 'root', 'password' => 'jambon fumé', 'host' => 'localhost', 'database' => 'my_game' ) ); Dans le code source d'application, on peut écrire : $configuration = include('configuration.include.php'); Avantages
Inconvénients
Utiliser la base de donnéesCette solution consiste à créer une table (par exemple “configuration_items”) contenant trois colonnes : un espace de nom, une clé et une valeur. Avantages
Inconvénients
RemarquesCette solution est utile dans un script amené à être utilisé par d'autres personnes qui n'ont pas forcément de compétences en informatique (pour un CMS, par exemple).
Utiliser un fichier INICette solution consiste à créer un fichier INI (http://fr.wikipedia.org/wiki/Fichier_INI). Ces fichiers sont de simples fichiers texte écrit en respectant une syntaxe particulière. Fichier configuration.ini : [global] players_per_universe = 50 supported_languages[] = "EN" supported_languages[] = "FR" [database] username = "root" password = "jambon fumé" host = "localhost" database = "my_game" Dans le code source PHP : // Ce fichier ne doit surtout pas être présent dans le dossier public_html/ sous peine d'être accessible à tous ! // Le deuxième argument permet de retourner un tableau à plusieurs dimensions. $configuration = parse_ini_file('../configuration.ini', true); Avantages
Inconvénients
Utiliser un fichier XMLCette solution consiste à créer un fichier XML (http://fr.wikipedia.org/wiki/XML). Fichier configuration.xml: <?xml version="1.0" encoding="UTF-8" ?> <configuration> <configuration_items> <configuration_item> <key>players_per_universe</key> <value>50</value> </configuration_item> <configuration_item> <key>players_per_universe</key> <values> <value>EN</value> <value>FR</value> </values> </configuration_item> </configuration_items> <namespace name="database"> <configuration_items> <configuration_item> <key>username</key> <value>root</value> </configuration_item> <configuration_item> <key>password</key> <value>jambon fumé</value> </configuration_item> <configuration_item> <key>host</key> <value>localhost</value> </configuration_item> <configuration_item> <key>database</key> <value>my_game</value> </configuration_item> </configuration_items> </namespace> </configuration> Dans le code source PHP : function xml2array($filename) { $ret = array(); # Une fermeture avec PHP >= 5.3 $toArray = function ($elt, &$ret) { foreach ($elt->configuration_items->configuration_item as $item) { if (isset($item->values)) { $ret[(string) $item->key] = array(); foreach ($item->values->value as $value) { array_push($ret[(string) $item->key], (string) $value); } } else if (isset($item->value)) { $ret[(string) $item->key] = (string) $item->value; } } }; # Une lambda pour PHP < 5.3 /*$toArray = create_function('$elt, &$ret', ' foreach ($elt->configuration_items->configuration_item as $item) { if (isset($item->values)) { $ret[(string) $item->key] = array(); foreach ($item->values->value as $value) { array_push($ret[(string) $item->key], (string) $value); } } else if (isset($item->value)) { $ret[(string) $item->key] = (string) $item->value; } } ');*/ # (sinon utiliser une classe et en faire une méthode privée) # /!\ Les chaînes (clés et valeurs) sont en UTF-8 ! libxml_use_internal_errors(TRUE); $sxml = simplexml_load_file($filename); if ($sxml) { if (isset($sxml->configuration_items)) { $toArray($sxml, $ret); } foreach ($sxml->namespace as $namespace) { $key = (string) $namespace['name']; $ret[$key] = array(); $toArray($namespace, $ret[$key]); } } return $ret; } $configuration = xml2array('../configuration.xml'); Avantages
Inconvénients
Utiliser un fichier JSONCette solution consiste à créer un fichier JSON (http://json.org/). Fichier configuration.json : {
players_per_universe: 50,
supported_languages: [ "EN", "FR" ],
database: {
username: "root",
password: "jambon fumé",
host: "localhost",
database: "my_game"
}
}
Dans le code source PHP : // Ce fichier ne doit surtout pas être présent dans le dossier public_html/ sous peine d'être accessible à tous ! // Le deuxième argument permet de retourner un tableau associatif plutôt qu'un objet. $configuration = json_decode(file_get_contents('../configuration.json'), true); Avantages
Inconvénients
|
|
tutoprog/ou_mettre_les_variables_de_configuration.txt · Dernière modification: 2011/04/03 14:06 (édition externe)
|