2010-02-03 5 views
3

J'ai certaines métadonnées de site que j'aimerais être modifiables ... par exemple, dans mon application, si le sysadmin ne voulait pas utiliser la partie "Inventaire" du site, il/elle pourrait l'éteindre, et il disparaîtrait du site principal.Comment stocker les paramètres de configuration pour une application Web?

Donc je pensais, peut-être que je pourrais faire une table dans ma base de données appelée "meta", et insérer des valeurs (ou des tuples) là! Ensuite, si un module était désactivé, le script mettrait à jour la ligne, et mettrait "module x" à 0, et j'en aurais fini, n'est-ce pas? Sauf qu'il semble que beaucoup de frais généraux (créer une table entière, et le maintenir, etc) juste pour un ensemble de valeurs ... Fondamentalement, ma solution ressemble à pousser une cheville carrée dans une fente circulaire. Un coup d'œil rapide sur la base de données drupal n'a donné aucun résultat, et je suppose qu'ils utilisent un fichier de configuration sur le serveur lui-même? Si tel est le cas, je ne sais pas exactement comment les valeurs enregistrées dans un fichier .cfg (par exemple) pourraient être lues par l'application web, et je ne sais pas comment une telle application pourrait enregistrer des informations dans le fichier. J'apprécierais votre perspicacité, si vous avez abordé ce problème avant. J'utilise d'abord PHP, d'ailleurs.

Merci d'avance!

+0

Drupal fait absolument dans le base de données, sinon les mises à jour et les mises à jour de modules deviendraient douloureuses car les fichiers pourraient être écrasés lorsque vous les copiez dans des modules et autres joyeusetés. Il y a de nombreux autres avantages à l'avoir dans la base de données, mais cela dépend vraiment de l'échelle de votre projet, que cela en vaille la peine ou non. Drupal, avec des centaines de modules, cela a du sens. – cgp

+0

+1, bonne question :) – richsage

Répondre

2

J'ai souvent vu cela accompli en utilisant un tableau de configuration:

$config["admin_email"] = "[email protected]"; 
$config["site_name"] = "Bob's Trinket Store"; 
$config["excluded_modules"] = array("inventory", "user_chat"); 

Puis, plus tard, vous pouvez vérifier:

if (!in_array("inventory", $config["excluded_modules"])) { 
    // include inventory logic 
} 

Certes, cela est un peu en arrière. En réalité, il serait plus intelligent de déclarer explicitement inclus modules, plutôt que le négatif. Vous devez ensuite référencer ce config.php dans votre projet pour charger et agir en réponse à différentes configurations.

Vous pouvez implémenter cela comme une table de base de données aussi, faisant au moins deux champs:

  1. Option
  2. Valeur

option peut être "excluded_modules" et son value correspondant serait "inventaire, user_cat". En toute honnêteté cependant, cette méthode est un peu bâclée, et peut vous causer de la frustration à l'avenir.

+0

Je viens de recevoir votre dernière édition ... Je pensais complètement à l'envers en termes de schéma de ma table, au départ. Avoir deux colonnes, option et valeur, semble logique, et devrait être plus facile à gérer (comme le contributeur ci-dessous a mentionné). Merci! –

1

Vous avez essentiellement deux choix - soit le mettre dans une table DB, ou dans un fichier de configuration à plat (probablement PHP, peut-être XML). Avec ce dernier, pour le rendre modifiable à partir d'une page, vous devrez (1) traiter les problèmes d'accès aux fichiers spécifiques au système d'exploitation, (1) appliquer les autorisations de fichiers appropriées chaque fois que vous configurez un site, et (3) analyser et générer du code PHP/XML. Avec une base de données, tout ce dont vous avez besoin est une simple requête, donc je vais certainement y aller avec ça. Comme pour les grands projets utilisant cette approche, je sais que phpBB stocke la plupart de ses config dans une base de données (sauf pour les mots de passe, la dernière fois que j'ai vérifié).

2

Je sais que votre question est "comment puis-je lire/écrire dans un fichier séparé sur le serveur à partir d'une application web", mais j'ai pensé que je répondrais à l'une des hypothèses que vous avez faites. Il n'y a rien (trop) de mal à stocker votre configuration dans la base de données.

J'ai vu des projets (avec beaucoup de trafic, et un bon temps de disponibilité - et une tonne de TI le gardant ainsi = P) qui stockait la configuration dans la base de données, plus ou moins comme décrit. S'il s'agit d'une table unique, et que vous n'avez pas de schéma de basculement/partitionnement complètement fou, alors ce n'est pas vraiment beaucoup de surcharge.

La base de données dispose de nombreuses fonctionnalités, outre le stockage de données, et de nombreuses infrastructures. Si vous utilisez la base de données pour votre configuration, vous pouvez utiliser n'importe quel mécanisme pour le déploiement/la sauvegarde de la base de données sans trop de frais. Vous pouvez également tirer parti du mécanisme d'autorisations intégré et de toutes les fonctions d'annulation disponibles.

Editer: Cependant, si vous accédez à cette config à chaque affichage de la page, vous pourriez goulot d'étranglement :) Tout au sujet de votre conception. Une solution est que si vous avez un service web persistant, vous pouvez le faire analyser à nouveau toutes les X secondes.

+0

C'est un bon point, et je pense que j'ai été influencé avec succès. :) –

1

Je préfère travailler avec des fichiers ini que la configuration qui sont assis devant public_html folder.I penser qui me donne beaucoup de flexibilité et de regroupement var et de créer, si nécessaire pour les modules séparés ini etc.

Questions connexes