Homepage Inspire-world | Forum
CGI/Perl Workshops Konfigurationsdateien auslesen

 Inhaltsverzeichnis/Workshops Übersichtsseite/Konfigurationsdateien auslesen
In vielen Scripten möchte man Werte die man an verschiedenen Abschnitten immer wieder benötigt in eine externe Konfigurationsdatei auslagern. Hier will ich das an einem kurzen Beispiel beschreiben wie man aus einer solchen Datei die Werte abgreift und ausgibt.

Dabei gibt es verschiedene Arten solch externer Konfigurationsdateien.

1. Erstes Beispiel

Beispielhafter Aufbau der Datei die ausgelesen werden soll:

# Konfigurationsdatei
begruessung = Hallo Besucher
farbe = #DFDFDF 
schrift = Verdana
usw....
Hier der Code zum auslesen der Datei:
#!/usr/bin/perl

use CGI::Carp qw(fatalsToBrowser);

my %wert;
open(KONFIGURATION, '<konfiguration.dat') or die 'Kann diese Datei nicht öffnen: '.$!;
while (<KONFIGURATION>) {
chomp;				# Zeilenumbrüche entfernen
#s/#.*//;			# Kommentare ignorieren wenn nötig (dazu # entfernen am Anfang!)
s/^\s+//;			# Leerzeichen am Anfang entfernen
s/\s+$//;			# und dasselbe am Ende auch
next unless length;   	# Das was nun noch übrig ist... 
# splitten in Paare
my ($name, $value) = split(/\s*=\s*/, $_, 2);
$wert{$name}=$value;
}
close (KONFIGURATION);

print "Content-type: text/html\n\n";
# So werden die Konfigurationsparameter ausgegeben 
print "<font face=\"$wert{'schrift'}\" color=\"$wert{'farbe'}\">$wert{'hallo'}</font>";
Hinweise hierzu: Manchnmal kann es nötig sein das man Kommentarzeilen auch mit herausfiltert. Hier in dem Beispiel ist die Zeile
#s/#.*//; # Kommentare ignorieren wenn nötig (dazu # entfernen am Anfang!)
durch eine Raute am Anfang auskommentiert. Dies ist nötig um den Farbwert, der auch mit einer solchen Raute # beginnt auch auszulesen.

2. Zweites Beispiel

Beispielhafter Aufbau der Datei die ausgelesen werden soll:

# Konfigurationsdatei
$begruessung = "Hallo Besucher";
$farbe = "#DFDFDF"; 
$schrift = "Verdana";
$email = "webmaster\@domain.de";
usw....
#####################
# Diese Zeile mit 1; muss am Dateiende stehen
1;
Der Unterschied zum ersten Beispiel ist hier das die Variablen gleich als $variable in der Datei notiert sind. Auch ist bei solchen Dateien darauf zu achten das am Dateiende unbedingt eine 1; stehen muss.

In der Datei in der diese Werte verwendet werden sollen, wird die Datei mit require "konfiguration.pl"; in das Script eingebunden. Bei E-Mail Adressen die mit Doppelten Anführungszeichen notiert sind muss vor das @ der Backslash notiert werden, schreibt man so:
$email = 'webmaster@domain.de'; kann der Backslash weggelassen werden.

3. Drittes Beispiel

Beispielhafter Aufbau der Datei die ausgelesen werden soll:

%werte_hinweise = (
begruessung => "Hallo Mitglied $daten{'username'}",
willkommen => "willkommen im Forum von $daten{'forumname'}", 
weiterleitung => "Sie werden jetzt weitergeleitet",
regeln => qq~Unsere Forenregeln für $daten{'forumname'}<br>

Hier stehen die Forenregeln in mehreren Zeilen...
Hier stehen die Forenregeln in mehreren Zeilen...
Hier stehen die Forenregeln in mehreren Zeilen...
~
);

1;
Diese Dateiversion wird meist in Scripten benutzt die externe Sprachdateien aufrufen. Das sind zum Großteil Foren oder andere größere Scripte.

Der Einbindung in die Scriptdateien geschieht per $werte_hinweise{begruessung}

Die Einbindung geschieht wieder per: require "hinweise_deutsch.daten";

Wichtige Hinweise zum Dateiaufbau:

  1. Die Datei ist ein Hash von Werten. Ein Hash ist durch das Prozentzeichen % vor dem Hashnamen zu erkennen.
  2. Die Trennung der einzelnen Werte und Zuweisungen wird mit => vorgenommen.
  3. Die Zeilen werden mit einem Komma beendet, ausser die letzte Zeile!.
  4. Der Hash muss wieder mit ); geschlossen werden.
  5. In der letzten Zeile muss 1; notiert werden.

4. Viertes Beispiel

Beispielhafter Aufbau der Datei die ausgelesen werden soll:

Max	
Mustermann
webmaster@domain.de
http://www.domain.de
Das Script zum auslesen:

#!/usr/bin/perl

#Fehlerausgabe an Browser
use CGI::Carp qw(fatalsToBrowser);

# Dateiflock
use Fcntl qw(:DEFAULT :flock);

#Datei auslesen
open(KONFIGURATION, "konf.dat") || die "Kann Datei konf.dat nicht öffnen\n";
flock(KONFIGURATION,LOCK_EX);
@konf = <KONFIGURATION>;
close(KONFIGURATION);

Datei durchlaufen mit foreach
foreach(@konf) { 
# Zeilenumbruch entfernen
chomp $_; 
}

print "Content-type: text/html\n\n";

# Ausgabe der Werte
# konf[0] ist dabei die erste Zeile!

print qq~
$konf[0]<br>
$konf[1]<br>
$konf[2]<br>
$konf[3]<br>
~;


 Zum Inhaltsverzeichnis/Workshops Übersichtsseite/Konfigurationsdateien auslesen
Autor: Helmut Walter Homepage Inspire-world Fragen, Anregungen und Hinweise bitte in das Forum

Valid HTML 4.0! Valid CSS!