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:
#!/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=/tmp/cgi-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>'