PHP-Entwicklung
Posts 1-10 of 11
- Back
- Next
-
Fabian VolmerThe company name is only visible to registered members.Konfiguration einer Anwendung
Hallo Zusammen,
ich möchte mal Eure meinungen hören, was die Konfiguration einer Anwendung an geht. Damit meine ich eine zentrale Konfiguration, wie z.B. Datenbank-Verbindungs-Daten, Smarty-Dir, usw. Also eigentlich die generellen Einstellungen die eine Anwendung so benötigen kann.
Ich habe bisher meist Konstanten per define zu Beginn der Ausführung deklariert. Überlege jedoch in Zukunft die gesamte Konfiguration in einem zentralen Objekt zu verwalten, weiß nur noch nicht im Detail, dies am geschicktesten zu handhaben. Oder sollte man ein globales Array für die Config nutzen (ist ja eher von abzuraten)?
Welchen Ansatz benutzt Ihr so?
- 23 Jan 2008, 3:22 pm
-
Guido Faust Premium MemberThe company name is only visible to registered members.Re: Konfiguration einer Anwendung
Vielleicht schaust Du Dir mal an, wie die Ansätze bei ZendFramework (Objekt) oder ezComponents (Objekt) gelöst werden; durch den arrayartigen Zugriff per SPL lässt es sich damit gut arbeiten.
- 23 Jan 2008, 4:21 pm
-
Daniel FritzThe company name is only visible to registered members.Re: Konfiguration einer Anwendung
ich persönlich habe immer eine zentrale konfigurationsdatei.
sind meistens Konstanten aber einige dinge sind auch Arrays.
Bei Klassen übergebe ich meistens diese Daten als Parameter (falls sie keine Konstanten sind) und in selten fällen nutze ich "global"
Ich hatte auch mal einen Versuch angestrebt mit einer Konfigurationsklasse zu arbeiten, aber sowas lohnt sich meiner Meinung nach nur bedingt.
Wenn man öfters mal dynamisch und temporär die Konfig ändern muss sind natürlich objekte mit get-/set-methoden sehr praktisch, aber es wird mit der zeit ziemlich groß und etwas unübersichtlich für ein schnelles konfigurieren.
wenn ottonormaluser sowas konfigurieren sollten tendiere ich zu einer normalen konfig, die ist meines erachtens nach etwas leichter zu verstehen. als wenn man irgendwo im konstrutkur eines objekts initialisierungen durchforsten muss.
- 23 Jan 2008, 4:24 pm
-
Post visible to registered members
-
Karsten KrausThe company name is only visible to registered members.Re: Konfiguration einer Anwendung
Hallo,
für kleine Sachen packe ich den Kram in eine Ini-Datei und packe mir die per parse_ini_file() in ein zentrales Array (bzw. lese sie "am Anfang", wenn das Skript konfiguriert wird).
Für komplexere Sachen, die länger leben und ein paar Entwicklungszyklen überstehen sollen, schreibe ich mir meist ein zentrales Configuration-Singleton mit zwei öffentlichen Methoden:
&Configuration::getInstance() - Singleton-Konstruktor (muss in PHP4 halt immer per $x =& Configuration::getInstance() geholt werden, sonst bringts nix)
Configuration::get($key) - gibt den Wert aus der Konfiguration zurück...
Zu Beginn der Entwicklung oder zum Testen baue ich dann in der Configuration-Klasse erstmal ein Array mit (Dummy-)Werten auf, die später - wenn ich weiss, was alles konfigurierbar sein muss - in eine Ini-Datei oder, bei komplexeren Strukturen, in eine YAML/XML-Konfiguration wandern ohne dass der Rest der Anwendung was davon mitbekommen muss.
Normalerweise initialisiere ich die Konfiguration beim ersten Zugriff auf Configuration::get(). Sollte ein fehlender Wert oder eine fehlende Konfigurationsdatei schon beim "Startup" bemerkt werden, gibts dafür noch eine Configuration::init() oder Configuration::validate() dazu.
Gruß
Karsten
This post was modified on 23 Jan 2008 at 04:34 pm.- 23 Jan 2008, 4:32 pm
-
Fabian VolmerThe company name is only visible to registered members.Re^2: Konfiguration einer Anwendung
Also an eine ini-Datei habe ich bisher noch gar nicht gedacht, das wäre sicherlich auch eine übersichtliche Möglichkeit die Daten Zentral zu halten.
Das ganze dann per Klasse mit get zu beziehen ist meiner Meinung nach dann auch gut, somit ist dem Rest der Anwendung nachher egal wie ich letztendlich die Daten im Objekt handle, ob per ini-datei, DB oder sonstwas.
Den Singleton im config-object direkt kann ich mir allerdings sparen, da ich dieses eben auch in einer Zentralen Registry ablegen will, welche ja schon per Singleton geholt wird, und ich somit sowieso eindeutigen Zugriff von allen Breichen darauf habe.
Vielen Dank für Eure Ideen. Eine Lösung wird bestimmt eine gute Mischung ;-) Mal sehen was sich so entwickelt.
Ach, was mir spontan noch einfällt, wie sieht es denn performance mäßig aus? Ini-File vs. DB vs. Array- bzw. Konstantendeklaration im Code...
Gruß,
Fabian
- 24 Jan 2008, 08:58 am
-
Guido Faust Premium MemberThe company name is only visible to registered members.Re^3: Konfiguration einer Anwendung
Bei einer Datenhaltung in der DB hast du die Konfigurationsdaten wieder getrennt, denn die Zugriffsdaten für die Datenbank(en) musst Du ja im Filesystem vorhalten. Außerdem wird der Zugriff auf die DB länger dauern als die anderen Möglichkeiten, da hier ja erst eine Datenbankverbindung aufgebaut werden muss. Zudem ist PHP sehr schnell bei Array- und File-Operationen, so dass die Vorhaltung in einem Konfigurationsfile wohl der schnellere Weg sein sollte.
- 24 Jan 2008, 09:57 am
-
Post visible to registered members
-
Thomas WeinertThe company name is only visible to registered members.Re^5: Konfiguration einer Anwendung
Das Sicherheitsproblem ist da. Es rührt vom ursprünglichen Verhalten von PHP mit aktiviertem register_globals oder den entsprechenden Emulationen. Eine nicht definierte Optionen kann von außen gesetzt werden.
Im Beispielcode wird ein String als Variablenname verwendet. Der Beispielcode funktioniert jedoch nicht, da die Variablen innerhalb der Funktion einen anderen Namensraum nutzen. Die Funktion müßte so aussehen:
function return_constants($temp)
{
if(isset($GLOBALS[$temp]))
{return $GLOBALS[$temp]}
}
Durch die GLOBALS-Syntax wird auch die Verwendung der Syntax für dynamische Variablennamen unnötig.
Persönlich bevorzuge ich Konstanten für die Konfigurationsoptionen. Sie können nicht durch die Übergabe von Werten gesetzt werden, sind in allen Namenräumen verfügbar und können nicht im Script verändert werden (nur einmal gesetzt). Sie können allerdings nur skalare Werte aufnehmen (Strings, Zahlen, Boolean)
This post was modified on 24 Jan 2008 at 12:39 pm.- 24 Jan 2008, 12:38 pm
-
Post visible to registered members
- Back
- Next
