Die Optionen, die ich mit relativen Vorzügen / Schwächen sehe, sind:
Dateibasierte Mechanismen
Dazu muss Ihr Code an bestimmten Stellen suchen, um die INI-Datei zu finden. Dies ist ein schwer zu lösendes Problem, das in großen PHP-Anwendungen immer wieder auftritt. Sie müssen das Problem jedoch wahrscheinlich lösen, um den PHP-Code zu finden, der zur Laufzeit integriert / wiederverwendet wird.
Übliche Ansätze hierfür sind die Verwendung relativer Verzeichnisse oder die Suche ab dem aktuellen Verzeichnis nach einer Datei, die ausschließlich im Basisverzeichnis der Anwendung benannt ist.
Übliche Dateiformate für Konfigurationsdateien sind PHP-Code, ini-formatierte Dateien, JSON, XML, YAML und serialisiertes PHP
PHP-Code
Dies bietet eine enorme Flexibilität bei der Darstellung verschiedener Datenstrukturen, und (vorausgesetzt, er wird über include oder require verarbeitet) der analysierte Code wird aus dem Opcode-Cache verfügbar sein, was einen Leistungsvorteil bietet.
Der include_path bietet eine Möglichkeit, die potenziellen Speicherorte der Datei zu abstrahieren, ohne auf zusätzlichen Code angewiesen zu sein.
Andererseits ist einer der Hauptgründe für die Trennung von Konfiguration und Code die Trennung von Verantwortlichkeiten. Es bietet eine Route zum Einfügen von zusätzlichem Code in die Laufzeit.
Wenn die Konfiguration aus einem Tool erstellt wird, können die Daten im Tool möglicherweise überprüft werden. Es gibt jedoch keine Standardfunktion, um Daten für die Einbettung in PHP-Code zu umgehen, wie sie für HTML, URLs, MySQL-Anweisungen, Shell-Befehle ... vorhanden sind. .
Serialisierte Daten
Dies ist für kleine Konfigurationsmengen (bis zu etwa 200 Elemente) relativ effizient und ermöglicht die Verwendung einer beliebigen PHP-Datenstruktur. Das Erstellen / Analysieren der Datendatei erfordert nur sehr wenig Code (Sie können sich also stattdessen darum bemühen, sicherzustellen, dass die Datei nur mit entsprechender Berechtigung geschrieben wird).
Das Escaping von Inhalten, die in die Datei geschrieben wurden, erfolgt automatisch.
Da Sie Objekte serialisieren können, besteht die Möglichkeit, Code einfach durch Lesen der Konfigurationsdatei (die magische Methode __wakeup) aufzurufen.
Strukturierte Datei
Das Speichern als INI-Datei, wie von Marcel oder JSON oder XML vorgeschlagen, bietet auch eine einfache API, um die Datei einer PHP-Datenstruktur zuzuordnen (und mit Ausnahme von XML die Daten zu maskieren und die Datei zu erstellen), während der Code-Aufruf eliminiert wird Sicherheitslücke mit serialisierten PHP-Daten.
Es weist ähnliche Leistungsmerkmale wie die serialisierten Daten auf.
Datenbankspeicher
Dies wird am besten in Betracht gezogen, wenn Sie eine große Menge an Konfiguration haben, aber selektiv entscheiden, was für die aktuelle Aufgabe benötigt wird. Ich war überrascht, dass es bei etwa 150 Datenelementen schneller war, die Daten von einer lokalen MySQL-Instanz abzurufen als zu unserialisieren Sie eine Datendatei.
OTOH ist kein guter Ort, um die Anmeldeinformationen zu speichern, mit denen Sie eine Verbindung zu Ihrer Datenbank herstellen!
Die Ausführungsumgebung
Sie können Werte in der Ausführungsumgebung festlegen, in der PHP ausgeführt wird.
Dadurch entfällt die Notwendigkeit, dass der PHP-Code an einer bestimmten Stelle nach der Konfiguration sucht. OTOH lässt sich nicht gut auf große Datenmengen skalieren und ist zur Laufzeit nur schwer universell zu ändern.
Auf dem Client
Ein Ort, den ich zum Speichern von Konfigurationsdaten nicht erwähnt habe, ist der Client. Wiederum bedeutet der Netzwerk-Overhead, dass dies nicht gut auf große Konfigurationsmengen skaliert werden kann. Und da der Endbenutzer die Kontrolle über die Daten hat, müssen diese in einem Format gespeichert werden, in dem Manipulationen erkennbar sind (dh mit einer kryptografischen Signatur), und sollten keine Informationen enthalten, die durch ihre Offenlegung gefährdet sind (dh reversibel verschlüsselt sind).
Umgekehrt hat dies viele Vorteile beim Speichern vertraulicher Informationen, die dem Endbenutzer gehören. Wenn Sie diese nicht auf dem Server speichern, können sie von dort nicht gestohlen werden.
Netzwerkverzeichnisse
Ein weiterer interessanter Ort zum Speichern von Konfigurationsinformationen ist DNS / LDAP. Dies funktioniert für eine kleine Anzahl kleiner Informationen - Sie müssen sich jedoch nicht an die erste Normalform halten - berücksichtigen Sie beispielsweise SPF .
Die Infrastruktur unterstützt das Zwischenspeichern, Replizieren und Verteilen. Daher funktioniert es gut für sehr große Infrastrukturen.
Versionskontrollsysteme
Konfiguration wie Code sollte verwaltet und versioniert werden - daher ist es eine praktikable Lösung, die Konfiguration direkt von Ihrem VC-System zu erhalten. Dies ist jedoch häufig mit einem erheblichen Leistungsaufwand verbunden, weshalb das Zwischenspeichern ratsam sein kann.