INI-Dateien als Konfigurationsdateien für ASP-Anwendungen verwenden
Geschrieben von: Steffen Kangowski Wie schon im Artikel Lesen von Textdateien von Christian Koller angeschnitten, bieten sich Textdateien an, um Konfigurationsdaten für eine ASP-Anwendung abzulegen und bei Bedarf auszulesen. Eine solche Verfahrensweise bietet sich beispielsweise dann an, wenn Anwendungen distribuiert werden sollen. Solche Anwendungen werden oftmals verschlüsselt weitergegeben und es besteht dann der Wunsch Basiskonfigurationsdaten dem Betreiber transparent und editierbar zur Verfügung zu stellen. Ein anderes Beispiel wäre, wenn Konfigurationsdaten, unabhängig von der Verfügbarkeit einer Datenbank, der Anwendung zur Verfügung gestellt werden sollen. Wie aber könnte eine solche Konfigurationsdatei aussehen und wie greife ich gezielt auf einen gewünschten Eintrag zu? Wie kann man gleichartige Konfigurationsdaten trennen? Wie kann ich Daten unabhängig der Verwendung von Variablen und Konstanten so ablegen? Und wie kann ich absichern, daß wenn ein Wert nicht vorhanden ist, meine Anwendung weiterarbeiten kann? Fragen über Fragen. Die Antwort darauf könnte die Verwendung von INI-Dateien sein. Vielleicht erinnert sich der eine oder andere noch an die sogenannten INI-Dateien, die unter Windows 3.x massenhaft verwendet wurden und erst mit der Einführung von Windows9x und der Registrierungsdatenbank an Bedeutung verloren haben. Der große Vorteil von INI-Dateien besteht unter anderem:
Wie ist nun eine typische INI-Datei aufgebaut?Eine INI-Datei besteht aus mindestens einem Abschnitt. Abschnitte werden durch symbolische Namen, die in eckige Klammern gefaßt sind, gekennzeichnet. Jedes Schlüsselwort und der zugehörige Wert stehen in jeweils einer Zeile. Schlüsselwörter stehen unterhalb des zugehörigen Abschnitts. Das Schlüsselwort und der zugehörige Wert sind durch ein Gleichheitszeichen getrennt. Die Verwendung von mehr als einem Gleichheitszeichen in einer Zeile ist untersagt. Kommentare sind durch ein Semikolon vor dem ersten Textzeichen in der betreffenden Zeile zu kennzeichnen. Hier nun ein vollständiges Beispiel einer INI-Datei beispiel.ini (finden Sie im Download):
; Ein Kommentar in der beispiel.ini [AppLog] VirtualLogPath = /meineapps/log/ SysLogEnable = true LogPerMonth = true [Interface1] HeadColor = #0063ce MainColor = #2C5BA5 FontColor = #84ADEB TabSize = 400 [Interface2] HeadColor = #2277ce MainColor = #99ff99 FontColor = #84ADEB TabSize = 250 Wie aber gelangen wir nun an die Werte in einer solchen INI-Datei?Eine komfortable Funktion soll dabei helfen. Diese Funktion soll gezielt auf eine bestimmte INI-Datei zuzugreifen und den zugeordneten Wert eines bestimmten Schlüsselwortes in einem bestimmten Abschnitt zurückzugeben. Wenn das Schlüsselwort im angebenen Abschnitt nicht gefunden wurde, soll ein Default-Wert zurückgegeben werden. Diese Funktion heißt im Beispiel IniReadKey. Das vollständige Listing der Funktion finden Sie in der Datei (beispiel_ini.asp. Nun zur Analyse der Funktion IniReadKey:
IniReadKey(IniFilename, IniSection, IniKey, DefaultValue) Die Funktion erwartet vier Parameter:
Ein Aufruf der Funktion sieht dann beispielweise so aus:
<% MainColor = IniReadKey("c:\temp\appconfig.ini ","Interface1","MainColor","#c0c0c0") %> Nun zur eigentlichen Arbeitsweise der Funktion, Schritt für Schritt erklärt.
Function IniReadKey(IniFileName, IniSection, IniKey, DefaultValue) Dim FileSystem, IniFile, FileName, ThisLine, ThisSection, _ ThisKey, FoundSection, TmpValue If Instr(1,IniFileName,"\") > 0 Then FileName = Trim(IniFileName) Else FileName = Trim(server.mappath(IniFileName)) End If IniSection = Trim(IniSection) IniKey = Trim(IniKey) DefaultValue = Trim(DefaultValue) Als erstes überprüft die Funktion ob der übergebene Pfad ein physischer oder ein virtueller Pfad ist und wandelt gegebenenfalls den virtuellen Pfad in einen physischen Pfad um - und zwar mit Hilfe der Funktion server.mappath(). Weiterhin werden bei den anderen Parametern unnötige Leerzeichen entfernt.
Set FileSystem = _ CreateObject("Scripting.FileSystemObject") Set IniFile = _ FileSystem.OpenTextFile(FileName,ForReading,TristateFalse) Ein FileSystemObject Objekt wird erstellt und in in der Variable FileSystem gespeichert. Durch das FileSystemObject bekommt man Zugriff auf Dateien und Ordner, und wir verwenden das FileSystemObject um unsere INI Datei zum Lesen zu öffnen.
Do While NOT IniFile.AtEndOfStream ThisLine = Trim(IniFile.Readline) ' Überprüfen ob aktuelle Zeile ein Abschnitt ist If Instr(1, ThisLine, "[") > 0 Then 'Abschnitt ja aber ob der richtige ? FoundSection = false 'Überprüfen ob aktuelle Zeile der 'richtige Abschnitt ist If Instr(1, ThisLine, IniSection) > 0 Then 'OK Abschnitt gefunden, Flag auf true 'setzen bis zum nächsten Abschnitt FoundSection = true End If End If Nun wird die INI-Datei Zeile für Zeile gelesen und nach einem Abschnitt gesucht, die ja allesamt durch eckige Klammern gekennzeichnet sind . Dazu wird jede gelesene Zeile mit Instr nach einer eckigen Klammer durchsucht. Wenn ein Abschnitt gefunden wurde, dann wird natürlich noch überprüft, ob es sich um den richtigen Abschnitt handelt.
If FoundSection Then 'prüfen ob Key in aktueller Zeile 'UND nur weiter wenn rechts vom Key ein IstGleich- 'Zeichen steht UND nur weiter wenn kein 'Kommentarzeichen (Semikolon) vor Text If Instr(1, ThisLine, IniKey) > 0 AND Instr(Instr(1, ThisLine, IniKey) _ + Len(IniKey), ThisLine, "=") > 0 AND Left(ThisLine,1) <> ";" Then Anschließend wird, wenn es sich tatsächlich um den richtigen Abschnitt handelt, überprüft ob in der aktuellen Zeile der INI-Datei der passende Schlüssel Parameter IniKey vorhanden ist, ob rechts vom Schlüssel ein Gleichheitszeichen steht und ob es sich bei der Zeile nicht um eine Kommentarzeile handelt. Wenn alle Bedingungen erfüllt sind wird die Schleife verlassen und der gelesene Wert zwischengespeichert.
'Wert übertragen und Lesen beenden TmpValue = Trim(Mid(ThisLine,Instr(1, ThisLine, "=")+1)) Exit Do End If End If Loop Im Anschluß prüft die Funktion noch ob der gefundene Wert leer ist und übergibt gegebenenfalls den Default-Wert aus DefaultValue.
If TmpValue = "" OR IsEmpty(TmpValue)Then IniReadKey = DefaultValue Else IniReadKey = TmpValue End If IniFile.Close Set FileSystem = Nothing Set IniFile = Nothing End Function Mit dieser Funktionalität hat man somit die Möglichkeit, sehr bequem und übersichlich zum Beispiel Konfigurationsdaten einer ASP-Anwendung abzulegen und darauf zuzugreifen. Wichtig ist noch anzumerken, daß aus Sicherheitsgründen solche INI-Dateien unbedingt so im Dateisystem abgelegt werden sollten, daß Sie via Web nicht erreichbar sind und somit ein Download der INI-Dateien unmöglich ist. Deshalb sollte man mit dem Parameter IniFileName nach Möglichkeit immer physische Pfade übergeben. Wer die Möglichkeit hat, Komponenten auf dem von ihm genutzten IIS zu installieren, kann natürlich auch auf Komponenten zurückgreifen, die bezüglich der Arbeit mit INI-Dateien ungleich mehr Komfort bieten. Ein Beispiel für eine solche Komponente ist SA-FileManager von Software Artisans. SchlußbemerkungMan kann nicht nur INI-Dateien lesen, sondern aus ASP heraus auch den Inhalt von INI-Dateien aktualisieren beziehungsweise neue INI-Dateien anlegen. Download des CodesKlicken Sie hier, um den Download zu starten. Verwandte ArtikelWenn Sie jetzt Fragen haben...Wenn Sie Fragen rund um die in diesem Artikel vorgestellte Technologie haben, dann schauen Sie einfach bei uns in den Community Foren der deutschen .NET Community vorbei. Die Teilnehmer helfen Ihnen gerne, wenn Sie sich zur im Artikel vorgestellten Technologie weiterbilden möchten. Haben Sie Fragen die sich direkt auf den Inhalt des Artikels beziehen, dann schreiben Sie dem Autor! Unsere Autoren freuen sich über Feedback zu ihren Artikeln. Ein einfacher Klick auf die Autor kontaktieren Schaltfläche (weiter unten) und schon haben Sie ein für diesen Artikel personalisiertes Anfrageformular.
Und zu guter Letzt möchten wir Sie bitten, den Artikel zu bewerten. Damit helfen Sie uns, die Qualität der Artikel zu verbessern - und anderen Lesern bei der Auswahl der Artikel, die sie lesen sollten.
©2000-2006 AspHeute.com |