4 Stimmen

Wie speichert man Konfigurationseinstellungen für Webanwendungen?

Ich habe einige Website-Metadaten, die ich gerne ändern würde... wenn der Systemadministrator in meiner Anwendung beispielsweise den "Inventar"-Teil der Website nicht verwenden möchte, könnte er/sie ihn deaktivieren, und er würde von der Hauptsite verschwinden.

Also dachte ich, vielleicht könnte ich eine Tabelle in meiner Datenbank mit dem Namen "meta" erstellen und dort Werte (oder Tupel) einfügen! Wenn dann ein Modul ausgeschaltet wird, würde das Skript die Zeile aktualisieren und "Modul x" auf 0 setzen, und ich wäre damit fertig, richtig?

Nur scheint es wie eine schreckliche Menge von Overhead (Erstellen einer ganzen Tabelle, und pflegen es, etc) nur für eine Reihe von Werten... Im Grunde klingt meine Lösung wie ein eckiger Pflock in einen runden Schlitz zu stecken.

Ein flüchtiger Blick in die Drupal-Datenbank ergab nichts, und ich vermute, sie verwenden eine Konfigurationsdatei auf dem Server selbst? Wenn das der Fall ist, weiß ich nicht genau, wie gespeicherte Werte in einer .cfg-Datei (zum Beispiel) von der Webanwendung gelesen werden könnten, noch weiß ich, wie eine solche Anwendung Informationen in der Datei speichern könnte. Ich wäre Ihnen dankbar, wenn Sie sich mit diesem Problem schon einmal auseinandergesetzt hätten.

Ich verwende übrigens hauptsächlich PHP.

Vielen Dank im Voraus!

2voto

Sampson Punkte 258265

Ich habe oft gesehen, dass dies mit einem Konfigurations-Array erreicht wird:

$config["admin_email"] = "admin@mydomain.com";
$config["site_name"] = "Bob's Trinket Store";
$config["excluded_modules"] = array("inventory", "user_chat");

Dann können Sie später nachsehen:

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

Zugegeben, das ist ein bisschen rückwärtsgewandt. In Wirklichkeit wäre es klüger, explizit zu deklarieren inklusive Module und nicht das Negative. Sie würden dann auf Folgendes verweisen config.php in Ihrem Projekt zu laden und als Reaktion auf verschiedene Konfigurationen zu handeln.

Sie könnten dies auch als Datenbanktabelle implementieren, die mindestens zwei Felder enthält:

  1. Option
  2. Wert

Wo option kann "excluded_modules" sein und die entsprechende value wäre "inventory,user_cat". Um ehrlich zu sein, ist diese Methode etwas schlampig und kann in Zukunft zu Frustration führen.

2voto

Merlyn Morgan-Graham Punkte 56447

Ich weiß, dass Ihre Frage lautet: "Wie lese/schreibe ich in eine separate Datei auf dem Server aus einer Web-App", aber ich dachte, ich würde eine der Annahmen ansprechen, die Sie gemacht haben. Es ist nichts (zu) falsch mit der Speicherung Ihrer Konfiguration in der DB.

Ich habe Projekte gesehen (mit viel Verkehr und guter Betriebszeit - und einer Menge IT, die dafür sorgt, dass das so bleibt =P), die die Konfiguration in der Datenbank gespeichert haben, mehr oder weniger so, wie Sie es beschrieben haben. Wenn es sich um eine einzige Tabelle handelt und Sie kein verrücktes Failover-/Partitionierungsschema haben, dann ist das nicht wirklich ein großer Aufwand.

Die DB hat neben der Datenspeicherung noch viele andere Funktionen und eine umfangreiche Infrastruktur um sie herum. Wenn Sie die DB für Ihre Konfiguration verwenden, können Sie jeden Mechanismus, den Sie für die DB-Bereitstellung/Backup haben, mit geringen zusätzlichen Kosten nutzen. Sie können auch die Vorteile des eingebauten Berechtigungsmechanismus nutzen und alle verfügbaren Rückgängig-Funktionen.

Bearbeiten: Wenn Sie allerdings bei jeder Seitenanzeige auf diese Konfiguration zugreifen, könnte es zu Engpässen kommen :) Es geht um Ihr Design. Eine Lösung ist, dass Sie, wenn Sie einen persistenten Webdienst haben, können Sie es neu scannen die Konfiguration alle X Sekunden haben.

1voto

Max Shawabkeh Punkte 36359

Sie haben grundsätzlich zwei Möglichkeiten - entweder in einer DB-Tabelle oder in einer flachen Konfigurationsdatei (wahrscheinlich PHP, vielleicht XML). Bei letzterem müssen Sie, um sie von einer Seite aus editierbar zu machen, (1) sich mit chaotischen OS-spezifischen Dateizugriffsproblemen befassen, (1) jedes Mal, wenn Sie eine Site einrichten, die richtigen Dateiberechtigungen anwenden und (3) PHP/XML-Code parsen und generieren. Mit einer Datenbank brauchen Sie nur eine einfache Abfrage, also würde ich mich auf jeden Fall dafür entscheiden.

Was große Projekte betrifft, die diesen Ansatz verwenden, so weiß ich, dass phpBB den größten Teil seiner Konfiguration in einer Datenbank speichert (mit Ausnahme der Passwörter, als ich das letzte Mal nachgesehen habe).

1voto

ntan Punkte 2167

Ich ziehe es vor, mit ini-Dateien als Konfiguration, die vor public_html Ordner sitzen zu arbeiten.ich denke, das gibt mir eine Menge Flexibilität und Gruppierung var und erstellen Sie bei Bedarf separate ini für Module usw.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X