25 Stimmen

PHP - Anwendungskonfigurationsdatei gespeichert als - ini,php,sql,cached,php class,JSON,php array?

Ich versuche zu entscheiden, wie ich die Konfigurationseinstellungen meiner Anwendungen am besten speichern kann. Es gibt so viele Möglichkeiten.

Die meisten Anwendungen, die ich gesehen habe, verwenden ein einfaches require und eine PHP-Datei, die Variablen enthält. Es scheint da draußen weitaus fortgeschrittenere Techniken zu geben.

Was haben Sie verwendet? Was ist am effizientesten? Was ist am sichersten?

2voto

Peter Lindqvist Punkte 9942

Nur ein Beispiel für die Implementierung einer zentralen XML/Xpath-Konfiguration.

class Config {
    private static $_singleton;
    private $xml;
    static function getInstance() {
        if(is_null (self::$_singleton) ) {
                self::$_singleton = new self;
        }
        return self::$_singleton;
    } 
    function open($xml_file) {
        $this->xml = simplexml_load_file($xml_file);
        return $this;
    }
    public function getConfig($path=null) {
        if (!is_object($this->xml)) {
            return false;
        }
        if (!$path) {
            return $this->xml;
        }
        $xml = $this->xml->xpath($path);
        if (is_array($xml)) {
            if (count($xml) == 1) {
                return (string)$xml[0];
            }
            if (count($xml) == 0) {
                return false;
            }
        }
        return $xml;
    }
}

Beispielanruf

Config::getInstance()
    ->open('settings.xml')
    ->getConfig('/settings/module/section/item');

2voto

Sarfraz Punkte 366217

Eine gute Lösung wären meiner Meinung nach ini-Dateien.

Ich bevorzuge keine Konfigurationsdatei, die Arrays/Variablen zum Speichern von Einstellungen verwendet; hier ist der Grund dafür:

Was ist, wenn ein Benutzer versehentlich Ihre Einstellungsvariable umbenannt hat?
Was ist, wenn eine Variable mit ähnlichem Namen auch an anderer Stelle vom Benutzer definiert wurde?
Variablen in der Konfigurationsdatei können an einer Stelle tief im Skript oder sogar in eingebundenen Dateien überschrieben werden.
und möglicherweise weitere Probleme....

Ich verwende gerne Ini-Dateien für die Einstellung meiner PHP-Anwendungen. Hier ist, warum:

Sie ist abschnittsweise aufgebaut
Es ist einfacher
Sie können Werte durch Eigennamen festlegen
Sie müssen sich keine Sorgen machen, dass Variablen überschrieben werden, weil es keine gibt.
Natürlich gibt es keinen Konflikt zwischen den Variablen. Es ermöglicht mehr Flexibilität bei der Angabe der Wertetypen.

Hinweis: Sie müssen Folgendes verwenden parse_ini_file Funktion zum Lesen von ini-Dateien.

0voto

monokrome Punkte 1333

Es ist am besten, die Kernkonfiguration in PHP selbst vorzunehmen, aber wenn Sie eine Datenbank verwenden und sich nicht an dem zusätzlichen Overhead stören, können Sie einige Einstellungen mit einer einzigen zusätzlichen Abfrage flexibel in der Datenbank speichern (vorausgesetzt, Sie organisieren es richtig).

Wie auch immer, die Speicherung dieser Daten in JSON, INI, XL usw. ist nur eine weitere unnötige Abstraktion, die heutzutage viel zu oft im Web verwendet wird. Die beste Lösung ist reines PHP, es sei denn, Sie mögen die Flexibilität einiger Einstellungen in der Datenbank.

0voto

Dana the Sane Punkte 14222

Der einzige Grund, den ich mir vorstellen kann, um php vars nicht zu verwenden, wie andere vorschlagen, ist, wenn Sie zwischen Konfigurationen in einer kontrollierten Art und Weise wechseln müssen, so dass Daten/Verhaltenskonsistenz während des Wechsels besteht. Wenn Sie zum Beispiel die Datenbank wechseln, könnte das System schreibgesperrt sein, bis die Umschaltung erfolgt (um Ghostwrites zu verhindern, aber schmutzige Lesungen sind immer noch möglich).

Wenn solche Dinge ein Problem darstellen, könnten Sie eine spezielle Administratorseite in Ihre Anwendung schreiben (aus Sicherheitsgründen nur mit lokalem Zugriff), die das System vorübergehend sperrt und dann alle Ihre Änderungen liest und bereitstellt, bevor sie entsperrt wird.

Wenn Sie eine stark frequentierte Website betreiben, bei der es auf Konsistenz ankommt, sollten Sie dies in Betracht ziehen. Wenn Sie die Website außerhalb der Geschäftszeiten einrichten können, wenn wenig/kein Datenverkehr herrscht, dann sind php-Vars oder andere Standardtextformate in Ordnung.

0voto

Gabriel Sosa Punkte 7818

Mir gefällt die Idee, "Namensräume" oder eine Art Baum zu haben.

damit Sie es haben können:

db.default.user

ou

db.readonly.user

und so weiter.

Was nun den Code betrifft, so habe ich eine Schnittstelle für die Konfigurationsleser geschaffen: Sie können also einen Speicherleser, einen Array-Leser, einen Datenbankleser usw. haben.

und eine Konfigurationsklasse, die diese Leser verwendet und es Ihnen ermöglicht, eine Konfiguration von jeder Art von Quelle zu haben

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