PHP - config fichier stocké comme - ini,php,sql,mise en cache,classe php,JSON,php array?
Je suis en train de décider sur la meilleure façon de stocker mes applications paramètres de configuration. Il ya tellement de nombreuses options.
La majorité des applications que j'ai vu ont utilisé un simple besoin et un fichier PHP qui contient des variables. Il semble y avoir beaucoup plus de techniques avancées là-bas.
Qu'avez-vous utilisé?
Ce qui est le plus efficace?
Ce qui est le plus sécurisé?
Vous devez vous connecter pour publier un commentaire.
La meilleure chose que vous pouvez faire est de la chose la plus simple qui pourrait éventuellement fonctionner (variables php) et l'envelopper dans une classe. De cette façon, vous pouvez changer la mise en œuvre plus tard, sans modification du code client. Créer une interface de configuration de la classe met en œuvre et faire le code du client d'utiliser les méthodes d'interface. Si plus tard vous décidez d'enregistrer la configuration dans une base de données ou JSON ou autre, vous pouvez changer simplement de mise en œuvre existantes par une nouvelle. Assurez-vous que votre configuration de classe est testable et écrire des tests unitaires.
Nous utilisons un fichier appelé
Local.php
qui sont exclues du système SCM. Il contient plusieurs constantes ou des variables globales. Par exemple:Et il peut être renvoyé à n'importe où simplement par:
Si vous avez besoin de paramètres pour être accessible en écriture à l'exécution, je vous suggère d'utiliser les variables statiques au lieu.
SetEnv
dans la configuration d'apache, vous pouvez définir les variables d'environnement qui apparaissent dans$_SERVER
.Essayez d'utiliser php-tableaux des fichiers de configuration à l'aide de la technique décrite ici: http://www.dasprids.de/blog/2009/05/08/writing-powerful-and-easy-config-files-with-php-arrays
Cette méthode permet d'écrire configuration de l'application de cette façon:
app.config.php
Cette méthode est sûre, cache-mesure par opcode cachers (APC, XCACHE).
Je trouve
Zend_Config
être une bonne solution. Vous pouvez charger la configuration à partir d'un tableau simple, de une INI fichier de style, ou de un document XML. Quel que soit votre choix, la configuration de l'objet est le même, de sorte que vous pouvez changer les formats de stockage librement.Zend_Config
les objets peuvent également être fusionnées, en fonction de votre application, cela peut être utile (un serveur de config, puis un par site/l'installation de config).Comme avec la plupart (ou la totalité) des choses dans le Zend Framework, vous pouvez facilement utiliser
Zend_Config
par lui-même.Compte tenu de l'efficacité, je dirais que la méthode la plus rapide serait d'utiliser un tableau, puisqu'elle nécessite moins (dans ce cas, aucune chaîne de l'analyse. Cependant, une INI/format XML peut être plus facile pour certains à maintenir. Bien sûr, certains de la mise en cache serait vous donner le meilleur des deux mondes.
Aussi, en utilisant les fichiers INI avec
Zend_Config
vous permettent de définir des sections de configurations qui héritent les uns des autres. L'utilisation la plus courante est le "développement" de la section qui hérite de la 'production' de la section, puis redéfinit la base de données/paramètres de débogage.De sécurité, en gardant le fichier de configuration hors de la racine web est la première étape. Rendant la lecture seule et en limitant l'accès pourrait-il faire plus de sécurité; toutefois, en fonction de votre accueil et de configuration du serveur vous pouvez être limité à ce qui peut être fait là.
Comment sur:
Enregistrer sous config.php (ou quelque chose comme ça, doit avoir l'extension php), et puis il suffit de le charger avec:
Et vous pouvez utiliser
pour fusionner un fichier de config par défaut avec un plus spécifiques fichier de config.
Le point ici est que vous pouvez utiliser le très lisible format ini, mais encore être en mesure d'avoir votre fichier de configuration dans un annuaire public.
Lorsque vous ouvrez le fichier avec votre navigateur, php va analyser et vous donner le résultat, qui sera juste "; un accès Direct non autorisées". Lorsque vous analysez le fichier directement dans un fichier ini, le php mourir déclaration seront commentés en fonction de la syntaxe ini (;) donc il n'aura pas d'effet.
Juste un exemple de comment mettre en place une centrale de XML/Xpath configuration.
Appel d'exemple
À mon avis, la bonne solution serait de fichiers ini.
Je ne préfère pas de fichier de configuration à l'aide de tableaux/variables pour stocker des paramètres; voici pourquoi:
Si un utilisateur accidentellement re-nommé votre réglage variable?
Que faire si une variable du même nom est défini d'ailleurs par l'utilisateur?
Les Variables dans le fichier de configuration peut être écrasé à quelques où en profondeur dans le script ou même des fichiers inclus.
et peut-être plus de problèmes....
J'aime utiliser le fichier ini pour le réglage de mes applis php. Voici pourquoi:
C'est la section en fonction
Il est plus facile
Vous pouvez définir des valeurs par des noms conviviaux
Vous n'avez pas à vous soucier de variables d'être remplacé car il n'y a pas ceux.
Pas de conflit de variables de cours.
Il permet plus de flexibilité dans la définition de la nature de valeurs.
Remarque: Vous devez utiliser parse_ini_file fonction de lire les fichiers ini.
Il est préférable de n'importe quelle configuration de base de PHP lui-même, mais si vous utilisez une base de données et ne dérange pas les frais généraux supplémentaires vous trouverez peut - être un peu de souplesse dans le stockage de certains paramètres dans la base de données avec une seule requête supplémentaire (en supposant que vous l'organiser correctement).
De toute façon, le stockage de ces données en JSON, INI, XL, etc est juste un autre inutiles, abstraction faite de trop de nos jours sur le web. Votre meilleur pari est de la pure PHP, sauf si vous aimez la flexibilité de certains paramètres dans la base de données.
La seule raison pour laquelle je peux penser à ne pas utiliser php vars, comme d'autres le sont suggérant si vous avez besoin de basculer entre les configurations d'une manière contrôlée, donc il y a des données/comportement de la cohérence au cours de l'interrupteur. Par exemple, si vous effectuez le changement des bases de données, le système pourrait écrire verrouillé jusqu'à ce que la commutation se produit (pour éviter fantôme écrit, mais sale lectures sont toujours possibles).
Si les choses de ce genre sont un sujet de préoccupation, alors vous pourriez écrire un spécial admin de la page dans votre application(pref accès local seulement pour la sécurité) qui bloque temporairement le système, puis lit et déploie toutes vos modifications avant de le déverrouiller.
Si vous utilisez un trafic élevé de site où la cohérence des questions, c'est quelque chose que vous voulez examiner. Si vous pouvez déployer hors des heures quand il y a peu/pas de trafic, alors php rva ou d'autres types de formats de texte fera l'affaire.
J'aime l'idée d'avoir des "espaces de noms" ou une sorte d'arbre
de sorte que vous pouvez avoir:
ou
et ainsi de suite.
maintenant en ce qui concerne le code de ce que j'ai fait une interface pour la configuration des lecteurs: vous pouvez donc avoir une mémoire de lecteur, lecteur de réseau, db reader, etc.
et une config de classe qui utilise les lecteurs et vous permettre d'avoir une config à partir de tout type de source