xwolf.de|com

Menü

Inhalt dieser Site

Ansicht

Individuelle Benutzerkonfiguration für die Site.

Druckansicht Startseite Suchen

A A A A

CGI Tutorial - Teil 8 / 10

Wolfgang Wiese (www.xwolf.de, xwolf@xwolf.de), Juli 1998, Letzte Änderung: Mai 2003

[Das Common Gateway Interface]
[Übergabe von Benutzereingaben]
[Decodierung der übergebenen Daten]
[Schritt 1: Erstellung einer Eingabeform]
[Schritt 2: Die Programmierung]
[Schritt 3: Debugging eines CGI-Programmes]
[Standardfehler]
[Die Optimierung von CGI-Programmen durch Libraries und Module]
[Tipps, Tricks und Beachtenswertes]
[Links zu wichtigen FAQs und CGI-Seiten]

Die Optimierung von CGI-Programmen durch Libraries und Module

Ein CGI-Programm, wie das oben vorgestellte kann man eigentlich nicht weiter optimieren. Wenn man allerdings mehrere verschiedene Programme erstellen muss, bietet es sich an Libraries oder Module zu benutzen.
Module enthalten einen ganzen Satz an nützlichen Subroutinen, die man immer wieder gebrauchen kann. Man braucht das Rad nicht neu zu erfinden.

So könnte man z.B. den Code, der die Eingabedaten entgegennimmt und decodiert in eine eigene Subroutine schreiben und dann bei Bedarf in unterschiedlichsten CGI-Programmen einfach durch den Befehl require Library;, bzw. use Modul; einfügen.
Somit gelangt man zu einer Library, bzw. eines Moduls an allgemeinen Funktionen, die die einzelnen CGI-Programme sehr einfach und transparent (im Sinne des Verdeckens von Implementationsdetails) machen.

Beispielsweise hab ich für die oben benutzten einfachen Routinen ein eigenes Modul mit Namen web gemacht.
Ich binde es mit folgenden Befehlen in mein Perl-Skript ein:

    use lib '(/pfad/zum/modul)'; # Wenn die Datei web.pm irgendwo ausserhalb des CGI-Verzeichnisses liegt
	use web;

Mit Hilfe dieses Modules können wir das obige Programm nun verkleinern:


#!/local/bin/perl

# simpleform.cgi Version 1.1
# Dieses Skript nimmt Eingaben aus einer Form entgegen, fügt  
# sie an eine vorgegebene Datei an, und zeigt dem Benutzer  
# nochmals, was er eingegeben hat.

# use lib '' kann entfallen, wenn das Modul sich im selben
# Verzeichnis wie das CGI-Programm befindet.
use web;

$dateiname = 'umfrage.dat';

# In die Datei mit den Namen 'umfrage.dat' werd ich meine Daten 
# speichern.

%in = &ReadParse;

print(PrintHeader);
print "<html><head>\n";
print "<title>Umfrageauswertung</title></head>\n";
print "<body bgcolor=\"white\">\n";
print "<h2>Vielen Dank für Ihre Informationen.</h2>\n";
print "Sie gaben ein:<hr><dl>\n";
print "<dd>Ihr Lernerfolg war $in{'Lernerfolg'}\n";
print "<dd>Das Tempo der Vorlesung war $in{'Tempo'}\n";
print "<dd>Ihre Vorkenntnisse waren $in{'Vorkenntnisse'}\n";
print "<dd>Ihr Kommentar:<br> $in{'Kommentar'}\n";
print "<p>";
if (($in{'Tempo'} eq 'zu langsam') 
 && ($in{'Lernerfolg'} eq 'nichts')) {
print "<br>Du fauler Sack!<br>\n";
}
# No comment here :))
NLock($dateiname);
open(filehandle,">>$dateiname") 
   || Fehlermeldung("Kann die Datei $dateiname nicht öffnen!");
print filehandle "-------Neuer Eintrag-------\n";
print filehandle "Lernerfolg = $in{'Lernerfolg'}\n";
print filehandle "Tempo = $in{'Tempo'}\n";
print filehandle "Vorkenntnisse = $in{'Vorkenntnisse'}\n";
print filehandle "Kommentar: $in{'Kommentar'}\n\n";
close filehandle;
NUnlock($dateiname);
print "</body></html>\n";
# Wir schliessen das HTML-Dokument
exit(0);

Neben dem Modul web gibt es noch andere bekannte Module und Libraries. Die cgi-lib.pl ist eine davon. Die Funktionen dieser Library wurden zum Teil in das obige Modul übernommen und verbessert.
Das am meisten verwendete und für Anfänger empfehlenswerte Modul ist CGI. Der Funktionsumfang dieses Modules ist um einiges größer als das des obigen Moduls oder der alten Library cgi-lib.pl. In der Regel ist das Modul bereits vorinstalliert bei jeder Perl-Version.
Ich selbst muß gestehen, daß ich das Modul ungern nutze. Das liegt jedoch nicht daran, daß es schlecht ist, sondern daß ich oft nur ein paar wenige Funktionen benutze, die sich in wenigen Zeilen definieren lassen. Hierzu möchte ich dann nicht das CGI-Modul laden, welches dann doch etwas umfangreich ist und somit den Speicher etwas mehr belastet...

Es ist Sache des CGI-Programmierers, welche Libraries oder Module er/sie bevorzugt. Wer sich aber mal im Netz nach Lösungen zu CGI-Problemen umschaut, wird öfters auf diese oder jene Library oder auf Module treffen. Deswegen ist es auch -wenn man seine eigenen Libraries benutzt- von Vorteil, wenn man von den anderen zumindest gehört hat, oder noch besser weiß wo er/sie diese erhalten bzw. darüber lesen kann.
Die meisten Perl-Module findet man beim Comprehensive Perl Archive Network, dem Perl Modul Archiv.



Info

© 1996 - 2003 by xwolf