Warum verwenden öffentliche Webanwendungen keine INI-Dateien zur Konfiguration?

10

Fast jedes öffentliche CMS verwendet eine .php-Konfigurationsdatei für die Datenbankeinstellungen und so weiter. Beispielsweise erstellt WordPress bei der Installation automatisch eine .php-Konfigurationsdatei.

Warum verwenden sie nicht einfach eine INI-Datei? PHP hat bereits parse_ini_file () und ich bin sicher, dass andere Sprachen ähnliche Funktionen haben.

thelolcat
quelle

Antworten:

9

Insbesondere mit PHP; Der Unterschied zwischen einer INI-Datei und einer .conf.php-Datei ist vernachlässigbar.

Die direkte Verwendung von PHP für die Konfiguration hat den entscheidenden Vorteil, dass nur eine genau definierte, tragbare Syntax für die Konfiguration verwendet werden muss und die Tatsache, dass die Konfigurationsdatei ordnungsgemäß aus Code besteht, gelegentlich nützlich ist.

Im Vergleich dazu; Eine INI-Datei hat wenig bis gar nichts zu bieten. und include, requireund require_oncesind alle bekannt und (meistens) gut verstanden.

Williham Totland
quelle
relate to one well-defined, portable syntax for configurationDas verstehe ich nicht. INI-Dateien haben auch eine gut definierte und portable Syntax. Jede .conf.phpDatei hat ihre eigene Struktur, die meisten sind Array-basiert, aber das ist nicht so anders als eine INI-Datei.
Yannis
7
Beachten Sie auch, dass eine PHP-Datei eine grundlegende Sicherheit bieten kann. Wenn Joomla XML oder .iniDateien zum Speichern der Konfiguration verwenden würde, würden zweifellos viele falsch konfigurierte Instanzen ausgeführt, in denen die Konfiguration öffentlich zugänglich war, was normalerweise nicht gut ist. Bei PHP-Dateien wird es sehr, sehr selten vorkommen, dass ein Server falsch konfiguriert wird, um den Inhalt eines Servers einem Besucher bereitzustellen.
Tom Marthenal
4

Generell bevorzuge ich .inioder XML-Konfigurationsdateien. In größeren Systemen muss häufig eine andere Person als der Entwickler einen Konfigurationswert ändern, möglicherweise einen DBA oder einen Systemadministrator. Die meisten DBAs und Sysadmins, die ich kenne, hätten keine Probleme beim Navigieren durch ein einfaches PHP-Skript, aber ich würde es vorziehen, wenn sie es nicht tun würden. Ein kleiner Fehler kann die gesamte Anwendung in vielerlei Hinsicht schädigen.

In kleineren Systemen ist es jedoch äußerst praktisch, PHP-Skripte für die Konfiguration zu verwenden. Ich habe heute mit dem AWS SDK herumgespielt, das auch ein PHP-Skript für die Konfiguration verwendet:

CFCredentials::set(array(
    'development' => array(
        'key' => 'xxx',
        'secret' => 'xxxx',
        'default_cache_config' => sys_get_temp_dir(),
        'certificate_authority' => true
    ),
    '@default' => 'development'
));    

Anstatt a fest zu codieren default_cache_config, übergebe ich die Systemtemperatur, und das würde in jedem System funktionieren, in dem ich das Skript bereitstelle. Dieses Skript ist ein kleiner Proof of Concept, der an 10 Entwickler weitergegeben wird, und ich möchte, dass sie es so ausführen, wie es ist, ohne viel darüber nachdenken zu müssen. Wenn sich der Prototyp weiterentwickelt, werde ich ihn mit meiner XML-Konfigurationsklasse fest verdrahten (und mich offensichtlich nicht auf den Dateisystem-Cache verlassen).

Yannis
quelle
"Ein kleiner Fehler kann die gesamte Anwendung in vielerlei Hinsicht schädigen." Als ob ungültige Werte für ini nicht würden? Oder dass XML freundlicher ist?
Whatsisname
@whatsisname Wenn ein falsch eingestellter Konfigurationswert Ihr System bremst, liegen Ihre Probleme normalerweise an anderer Stelle. Ich dachte eher an einen unbeabsichtigten Code in der Skriptkonfiguration, der etwas Extremes tut, etwas, das ich mehr als einmal erlebt habe. Dies ist mit einer INI / XML-Datei nicht möglich. Der Hauptpunkt ist, dass eine Skriptkonfiguration nicht für Nicht-Entwickler freigegeben werden soll.
Yannis
3

Die Antwort ist einfach: Eine conf.php benötigt im Grunde keine Arbeit, um zu funktionieren. Es ist nur eine andere Quelldatei.

Whatsisname
quelle
0

Geschwindigkeit ohne Caching kann auch der Grund sein. Die PHP-Konfiguration kann bei Bedarf transparent zwischengespeichert werden. Während die INI-Datei bei jedem Lesen einer Textanalyse unterzogen werden muss und Sie den Cache selbst erstellen müssen. Für kleine Dateien ist es in Ordnung, aber mit Hunderten von Zeilen, die bei jeder Anfrage analysiert werden, kann es bis zu zehn Millisekunden dauern, was für 200 ms optimiertes Web ziemlich viel ist.

Tomáš Fejfar
quelle