2009-04-28 4 views
10

J'ai une application écrite en PHP, et il y a un certain nombre de variables configurables. Nous implémentons une fonctionnalité permettant à l'utilisateur de créer des ensembles de configurations et de passer facilement d'un ensemble à l'autre. Comment devrais-je stocker mes configs? en XML? dans un fichier .ini? dans plusieurs fichiers .ini? dans un db?comment stocker les configurations pour php app - xml ou ini ou db

Qu'est-ce qui vous donnera le plus de flexibilité si nous ajoutons des champs plus tard? Codage pratique? Si j'utilise un db, je devrai en utiliser un distinct de celui principal de l'application pour des raisons qui ne valent pas la peine d'entrer, ce qui m'a éloigné de cela. (De plus, nous utilisons des fichiers .mdb pour notre db.)

Je suis allé sur la route XML, mais j'ai des problèmes avec l'ajout et la modification de configs en utilisant SimpleXML. En outre, l'application doit être compatible avec php 5.1.6, et je suis un peu nerveux au sujet de certaines fonctionnalités.

jamais vraiment traitées la création de fichiers ini personnalisés ....

Une petite précision: les utilisateurs ne touchent pas les fichiers - ils sont non-technophile. La configuration des fichiers initiaux sera donc faite par nous, mais nous écrirons ensuite un outil qui écrira leur (s) configuration (s) au format que nous choisirons.

Répondre

4

Le stockage des paramètres pour un DB dans un DB différent n'a pas beaucoup de sens, IMO.

Je choisirais un fichier ini, un fichier xml ou un fichier php, comme proposé par jmucchiello. Chaque option a ses avantages et ses inconvénients. En ce qui concerne xml versus ini, xml offre plus de flexibilité mais est plus difficile à maintenir (moins lisible). Si vos besoins sont couverts par ini, respectez la solution la plus simple. Utilisez xml seulement si vous avez besoin de plus que les fichiers ini peuvent vous offrir. En ce qui concerne la solution php, j'évaluerais la lisibilité quelque part entre ini et xml, mais il serait plus difficile d'enregistrer les paramètres actuels. Donc, autant que j'aime l'approche, pour votre scénario actuel, je ne le recommanderais pas.

+0

Un autre point à mentionner est qu'un fichier config.php avec des erreurs de syntaxe provoque le plantage de l'application, occasionnant parfois des erreurs (puisque le fichier de configuration lui-même devient une partie de l'application). L'utilisation de .xml ou .ini vous permet d'écrire votre code d'analyseur pour récupérer plus facilement à partir d'une erreur de syntaxe dans la configuration. – codemagician

1

Je pense que la réponse ici va vraiment dépendre de votre situation individuelle. Il y a des cas où chacune de ces options serait la meilleure. Pour votre cas particulier, xml serait probablement le meilleur. Mais où xml brille vraiment sur un fichier ini, c'est si vous avez plusieurs options connexes. Par exemple, si vous avez besoin de conserver les informations de connexion pour une base de données ayant des nœuds pour les différentes parties de la connexion sous un nœud pour cette connexion particulière peut être plus facile à lire et à maintenir. Cela dépend vraiment des données.

Je dirais aussi qu'un fichier xml serait plus facile à utiliser si vous alliez simplement sortir une seule valeur et ne pas charger le fichier entier en mémoire au début de l'application.

2

En fait, je préfère un fichier exécutable PHP pour la configuration. Vous pouvez faire beaucoup de choses dans un fichier exécutable que vous ne pouvez pas accomplir facilement en utilisant les autres solutions. Le seul gros inconvénient d'un fichier exécutable est que l'administrateur doit être familier avec PHP pour éditer le fichier en toute sécurité. PHP peut aussi décrire des types de données complexes dans votre configuration puisque c'est du code. DB est un problème car vous avez toujours besoin d'un fichier de configuration externe pour trouver et se connecter à la base de données.

Le code XML est trop lourd pour la configuration.

Les fichiers INI fonctionnent et vous pouvez utiliser les bibliothèques PHP ini pour les lire. Voir parse_ini_file(). Les fichiers ini ne traitent pas très bien du type de données complexe.

EDIT en réponse à Itay Moav (commentaires ne formatera pas ce droit):

<?php /* my config file */ 

$_CFG = Array(); /* problem solved */ 
$_CFG['key1'] = 'value1'; 
?> 
+1

et vous risquez d'avoir de la saleté dans votre portée mondiale, et si par hasard le registre global est activé, alors vous avez une menace grave pour la sécurité. –

+0

Votre configuration va probablement être dans la portée globale, peu importe quoi. C'est pourquoi c'est la configuration. Et un simple $ _CFG = Array(); en haut du fichier de configuration résout le problème register_globals. – jmucchiello

+0

nous n'avons vraiment pas à nous inquiéter de la sécurité - ceci est compilé dans une application exécutée localement. – sprugman

5

Je stocker les éléments de configurations dans un fichier PHP. C'est la méthode la plus flexible utilisée par I.

$config['website_url'] = 'google.com'; 

J'ai alors la structure de fichier suivant

- config/development 
- config/production 

J'ai une constante définie au début du logiciel nommé IN_PRODUCTION, lorsque cela est TRUE il charge les éléments de configuration de production et vice versa.

Ceci est simple et facile à maintenir.

-Mathew

+2

Notez que si vous stockez vos variables de configuration dans un fichier ini, vous pouvez obtenir les données dans un tableau associatif assez facilement. $ config = parse_ini_file ("config.php"); – tj111

+0

Je connais parse_ini_file(), mais comment écrire une config modifiée dans le fichier? (J'ai vu plusieurs classes et autres dans les commentaires sur php.net, mais je n'ai pas trouvé de fonction native qui fait ça.) – sprugman

+1

J'ai lu quelque part que les fonctions json_decode et file_get_contents utilisées ensemble sont pratiquement aussi rapides que les Parse_ini_file fonctionne seul. Ce qui me fait me demander pourquoi json ne serait pas une option plus fréquente pour stocker config en php. C'est certainement plus convivial que xml et plus succinct que ini. En outre, json est conscient du type, c'est-à-dire que les nombres décimaux peuvent être analysés en tant que nombres plutôt que chaînes. Ils pourraient probablement trouver une fonction parse_json_file qui serait encore plus rapide dans une future révision de php. –

0

Je pencherais pour les fichiers ini, ils sont lisibles par l'homme, ils sont en cours d'analyse très rapide (et si vous cache ....).
Certainement pas XML. Moins lisible par l'homme, analysé pas si vite.
Je ne ferais pas DB en raison de la vitesse.
Je n'utiliserais pas les variables PHP parce que cela vous fait utiliser la portée GLOBAL ...

0

Écrivez votre propre classe de configuration qui charge les fichiers de configuration. Un bon exemple est la façon dont CodeIgniter gère la configuration.

http://codeigniter.com/user_guide/libraries/config.html

Il charge certains fichiers de configuration par défaut ou vous pouvez charger une spécifique à la classe Config.

Vous pouvez télécharger le code source et voir comment ils le font à des fins éducatives.

Une autre option serait de générer un fichier php avec un tableau de configuration à partir de la base de données. Vous pouvez donc administrer toutes les options et lors de l'enregistrement générer le fichier.

2

J'ai regardé un poste avec la même question il ya un instant, voici une bonne solution dans le lien suivant. C'est une bonne pratique pour la collecte de code utile. Je suppose. :)

Cliquez sur iniHandler class pour obtenir la classe de gestionnaire INI!

+0

site web introuvable – diEcho

Questions connexes