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?

14voto

gahooa Punkte 121696

Wir verwenden eine Datei namens Local.php die vom SCM-System ausgeschlossen ist. Sie enthält mehrere Konstanten oder globale Variablen. Zum Beispiel:

// Local.php
class Setting
{
   const URL = 'http://www.foo.com';
   const DB_User = 'websmith';
}

Und es kann Bezug genommen werden auf überall einfach durch:

Setting::URL

Wenn die Einstellungen zur Laufzeit beschreibbar sein müssen, sollten Sie stattdessen öffentliche statische Variablen verwenden.

9voto

Asaph Punkte 153684

Das Beste, was Sie tun können, ist die einfachste Sache, die funktionieren könnte (php-Variablen) und verpacken sie in eine Klasse. Auf diese Weise können Sie die Implementierung später ändern, ohne den Client-Code zu verändern. Erstellen Sie eine Schnittstelle, die die Konfigurationsklasse implementiert, und lassen Sie den Client-Code die Methoden der Schnittstelle verwenden. Wenn Sie sich später entscheiden, die Konfiguration in einer Datenbank oder JSON oder was auch immer zu speichern, können Sie die bestehende Implementierung einfach durch eine neue ersetzen. Stellen Sie sicher, dass Ihre Konfigurationsklasse testbar ist und schreiben Sie Unit-Tests.

9voto

Sergey Kuznetsov Punkte 8381

Versuchen Sie, php-arrays Konfigurationsdateien mit der hier beschriebenen Technik zu verwenden: http://www.dasprids.de/blog/2009/05/08/writing-powerful-and-easy-config-files-with-php-arrays

Mit dieser Methode können Sie die Anwendungskonfiguration auf diese Weise schreiben: app.config.php

<?php

return array(
  'appname' => 'My Application Name',
  'database' => array(
    'type' => 'mysql',
    'host' => 'localhost',
    'user' => 'root',
    'pass' => 'none',
    'db' => 'mydb',
  ),
);

Diese Methode ist sicher und kann von Opcode-Cachern (APC, XCACHE) zwischengespeichert werden.

6voto

xyking Punkte 51

Wie wäre es damit:

; <?php die('Direct access not allowed ;') ?>
; The above is for security, do not remove

[database]
name = testing
host = localhost
user = root
pass = 

[soap]
enableCache = 1
cacheTtl = 30

Speichern Sie als config.php (oder so ähnlich, muss php-Erweiterung haben), und dann laden Sie es einfach mit:

parse_ini_file('config.php', true);

Und Sie könnten

array_merge_recursive(parse_ini_file('config-default.php', true), parse_ini_file('config.php', true))

um eine Standardkonfigurationsdatei mit einer spezifischeren Konfigurationsdatei zusammenzuführen.

Der Punkt hier ist, dass Sie das sehr lesbare ini-Format verwenden können, aber trotzdem in der Lage sind, Ihre Konfigurationsdatei in einem öffentlichen Verzeichnis zu haben. Wenn Sie die Datei mit Ihrem Browser öffnen, wird php sie zuerst analysieren und Ihnen das Ergebnis ausgeben, das lediglich "; Direct access not allowed ;" lautet. Wenn Sie die Datei direkt als ini-Datei auslesen, wird die php-Anweisung "die" entsprechend der ini-Syntax auskommentiert (;), so dass sie keine Auswirkungen hat.

5voto

Tim Lytle Punkte 17229

Ich finde Zend_Config eine gute Lösung zu sein. Sie können die Konfiguration aus einem einfachen Array , von eine INI-Stil-Datei oder von ein XML-Dokument . Unabhängig davon, für welche Variante Sie sich entscheiden, ist das Konfigurationsobjekt dasselbe, so dass Sie die Speicherformate beliebig wechseln können. Zend_Config Objekte können auch zusammengeführt werden, was je nach Anwendung nützlich sein kann (eine Serverkonfiguration, dann eine Konfiguration pro Site/Installation).

Wie bei den meisten (oder allen) Dingen im Zend Framework, kann man einfach mit Zend_Config von selbst.

Berücksichtigung der Effizienz Ich würde sagen, die schnellste Methode wäre, ein Array zu verwenden, da dies weniger (in diesem Fall keine) String-Parsing erfordert. Allerdings kann ein INI/XML-Format für einige leichter zu pflegen sein. Natürlich würde eine Zwischenspeicherung Ihnen das Beste aus beiden Welten bieten.

Auch die Verwendung von INI-Dateien mit Zend_Config ermöglichen es Ihnen, Abschnitte von Konfigurationen zu definieren, die sich gegenseitig vererben. Die häufigste Anwendung ist ein "Entwicklungs"-Abschnitt, der vom "Produktions"-Abschnitt erbt und dann die DB-/Debugging-Einstellungen neu definiert.

Was die Sicherheit betrifft Die Konfigurationsdatei wird beibehalten. aus dem Web Root ist der erste Schritt. Wenn man sie schreibgeschützt macht und den Zugriff beschränkt, könnte sie mehr sicher; je nach Ihrer Hosting-/Serverkonfiguration können Sie dort jedoch nur begrenzte Möglichkeiten 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