Webseitengestaltung mit CGI-Programmierung
1 Allgemeines
Bei der professionellen Gestaltung von Webseiten stößt man relativ schnell an die Grenzen der Möglichkeiten die reine HTML-Dokumente bieten. Einige Aufgaben machen es unerläßlich, daß der Webbesucher Programme auf dem Server ausführen darf. Dies stellt aber hohe Anforderung an die Sicherheit, weil es ausgeschlossen sein muß, auch andere Programme auszuführen, was schwerwiegende Probleme nach sich ziehen kann. Mit dem Common-Gateway-Interface (CGI) steht diese Möglichkeit zur Verfügung. Es ist integraler Bestandteil des Servers, welcher das ?http" - Protokoll bereitstellt.
2 Systemübersicht
Bild 1: Grundsätzlicher Aufbau des http-Servers mit CGI
Wird vom Client ein Dokument angefordert, trifft das CGI die Feststellung, ob der Dokumentpfad in das CGI-Programmverzeichnis oder in ein sonstiges Verzeichnis weist. Wird ein Programm im CGI-Programmverzeichnis angesprochen, wird dies vom CGI ausgeführt. Als Ergebnis liefert dieses Programm dann ein HTML-Dokument an das CGI. Dies geschieht über den Kanal ?Standardausgabe". Würde dieses Programm von der Shelloberfläche ?normal" ausgeführt erscheint dieses HTML-Dokument auf dem Bildschirm welcher üblicherweise das Standardausgabegerät darstellt.
Beispiel:
Wiki Markup |
---|
*\#\!/bin/sh* *\# disable filename globbing* *set \-f* *\# Ich bin ein Dokument vom Typ text/html* *echo Content-type: text/html* *echo ""* *\# Die HTML-Tags werden mit dem Befehl echo ausgegeben.* *echo '<HTML>'* *echo '<HEAD>'* *echo '<TITLE> Ein Counter </TITLE>'* *echo '</HEAD>'* *echo '<BODY BGCOLOR="BBDDFF" TOPMARGIN=5 LEFTMARGIN=5 LINK=YELLOW VLINK=WHITE><CENTER>'* *echo '<H5>'* *echo 'Besucher seit dem 01.06.1999:'* *echo '</H5>'* *echo '<TABLE BORDER=0 CELLSPACING="0" CELLPADDING="0"><TR><TD>'* *\# Der Pfadname zur Counterdatei, die den letzten Wert enthält* *\# Pfad vorhanden, Zugriffsrechte ??* *COUNT_FILE=/www/htdocs/keipke/count/.count* *if \[ \! \-f $COUNT_FILE \]* *then* * * *\# Wenn die Datei nicht existiert, dann mit dem Wert 0 anlegen.* * * *LAST_COUNT=0* * * *echo $LAST_COUNT >$COUNT_FILE* *else* * * *\# sonst Inhalt lesen und erhöhen, dann Speichern* * * *LAST_COUNT=`cat $COUNT_FILE`* * * *expr $LAST_COUNT + 1 >$COUNT_FILE* *fi* *\# Es ist ein 5-stelliger Zähler* *\# Der Wert wird jeweils durch die 5 Werte dividiert, das Ergebnis ergibt die* *\# einzelne Ziffer für jede Stelle* *for i in 10000 1000 100 10 1* *do* * * *FILENAME=`expr $LAST_COUNT / $i`* * * *while \[ $FILENAME \-gt 9 \]* * * *do* * * *\# solange der Wert größer 9 ist, weiter durch 10 teilen* * * *FILENAME=`expr $FILENAME % 10`* * * *done* *\# Der Wert bildet die Grundlage für den Dateinamen der Grafik, welche* *\# die einzelnen Ziffern enthält also 0.gif enthält die ?0"* *\# der Tag für die Anzeige der Grafik* * * *echo '<img src=/graphics/'$FILENAME'.gif border="0">'* *done* *echo '</TD></TR></TABLE>'* *echo '</CENTER>'* *echo '</BODY></HTML>'* |