Regionaler Arbeitskreis Internet am Oberschulamt Karlsruhe
von Roland Bernert

CGI-Scripts
 
Inhalt  
Download der Beispiele


Bemerkungen:

Mit CGI-Scripts ist es möglich, interaktive Internetseiten zu erstellen. Der Benutzer sieht ein Feld, in das er etwas eingibt und seine Daten absendet. Das CGI-Programm reagiert dann darauf und schickt die entsprechenden Daten wieder an den Benutzer zurück. Weiterhin ist es möglich, daß Datenbanken abgefragt und entsprechend ausgeliefert werden.
Ein CGI-Script erwartet die Eingaben von der Standardeingabe des Systems (bei UNIX STDIN); die Ausgaben erfolgen einfach auf die Standardausgabe (bei UNIX STDOUT).

Bei Shellscripten sind Fehler schwerer zu finden, da das Script so lange abgearbeitet wird, bis ein Fehler auftaucht.
Da Perlprogramme zuerst compiliert werden, erkennt man Fehler recht schnell.
Um CGI-Scripts zu entwickeln, ist es sehr von Vorteil, wenn man LINUX mit WWW-Server und X-Windows auf seinem Rechner installiert. Dann kann man die Scripts in Ruhe testen.  Es ist aber auch möglich, einen WWW-Server (z.B. SAMBAR) auf einem WIN95-Rechner zu installieren. Die Perlprogramme müssen dann meist nur ein wenig für UNIX angepasst werden.

Auf der CD können Sie die CGI-Scripts nicht testen. Falls Sie die Scripts testen möchten, wählen Sie die Seite: http://www.lehrer.uni-karlsruhe.de/~za186/RAI/cgiscripts.

Wie schickt der Browser die Daten zum Server ?

Bei einer URL der Form

schickt der Browser das Wort "hallo" zur Standardeingabe des Servers. Das CGI-Script muß diese Eingabe lesen und entsprechend verarbeiten.

Meist befindet sich auf einer Internetseite ein Eingabeformular. Jedes Feld eines solchen Formulars hat einen Namen (Feldvariablenname). Gibt der Benutzer etwas in das Feld ein, so schickt der Browser das Paar Feldvariable und Wert folgendermaßen an den Server:

Die Einleseroutine des CGI-Programms muß daher den Feldvariablennamen vom eigentlichen Wert trennen.

Gibt es auf dem Formular mehrere Felder, so werden die einzelnen Paare Feldvariablenname=Wert vom Browser durch ein "&" getrennt. Hier ein Beispiel:

Die Einleseroutine des CGI-Programms muß daher zuerst die einzelnen Paare Feldvar=wert (Trennzeichen "&") und dann noch von jedem einzelnen Wertepaar den eigentlichen Wert abtrennen (Trennzeichen "=").

Leerzeichen werden vom Browser durch "+"-Zeichen übertragen. Umlaute werden in Hexcodes kodiert. Daher muß bei jedem Wert eine entsprechende Umwandlugsroutine die "+"-Zeichen wieder in Leerzeichen und die Hexcodes wieder in Umlaute umwandeln.
 

Voraussetzungen:

  1. Sie müssen HTML kennen (Tags usw.)
  2. Umgang mit HTML-Formularen
  3. In Ihrem Home-Verzeichnis muß sich unterhalb von public_html ein Verzeichnis cgi-bin befinden. (mkdir cgi-bin)

  4. Dieses muß lesbar und ausführbar sein: (chmod a+rx cgi-bin)
    Dort befinden sich Ihre ausführbaren (chmod u+x dateiname.cgi) CGI-Programme.
    Diese können dann vom Brower aus mit
    http://www.lehrer.uni-karlsruhe.de/~za..../cgi-bin/dateiname.cgi
    gestartet werden.
    (Bsp: http://www.lehrer.uni-karlsruhe.de/~za186/cgi-bin/zasuche.cgi)
Anlegen des CGI-Verzeichnisses

1.) Shellscripts als CGI-Scripts

Shellscripts sind ausführbare Programm, die nur aus UNIX-Befehlen bestehen.

Beispiel 1: Das Programm zeigt nur den prinzipiellen Aufbau eines Shellscripts

Starten (nur online)

Beispiel 2:  Das Programm erwartet vom Benutzer eine Eingabe. Diese wird mit einem Dankschön zurückgeschickt.

Starten (nur online)

Beispiel 3: Der Benutzer tätigt eine Eingabe; die Eingabe gelangt in eine einfache Datenbankdatei.

Starten (nur online)

Beispiel 4: Es existiert eine Adressedatenbank; der Benutzer gibt einen Namen ein, die Adresse wird vollständig ausgegeben.

starten (nur online) starten (nur online) Starten (nur online)


2.) Perlscripts als CGI-Scripts

Perl ist eine richtige und mächtige Programmiersprache, die auf UNIX und LINUX-Maschinen läuft.
Mittlerweile gibt es auch Perl für DOS und Windows.

Wichtig:

Obige Beispiele  (und mehr) als Perlprogramm:
(statt /usr/bin/perl muß bei manchen UNIX-Systemen  (z.B. Lehrer-Rechner der UNI-Karlsruhe) /usr/local/bin/perl angegeben werden. Auf LINUX-Maschinen heißt das Verzeichnis meist /usr/bin/perl)

Beispiel 1: Das Programm zeigt nur den prinzipiellen Aufbau eines Perlprogramms

starten (nur online)

Beispiel 2.) Das Programm erwartet vom Benutzer eine Eingabe. Diese wird mit einem Dankschön zurückgeschickt.

starten (nur online)

Beispiel 3.) Der Benutzer tätigt eine Eingabe; die Eingabe gelangt in eine einfache Datenbank.

starten (nur online)

Beispiel 4.) Es existiert eine Adressedatenbank, Der Benutzer gibt einen Namen ein, die Adresse wird vollständig ausgegeben.

starten (nur online)
  starten (nur online) starten (nur online)

Beispiel 5.) Ein Benutzer schreibt einen kleinen Text. Dieser Text wird als Email abgeschickt.

starten (nur online)

Beispiel 6.) Ein etwas aufwendigeres Perlprogramm.
Der Benutzer gibt Namen, Wohnort und Familienstand an. Die Daten werden in einer Datei gespeichert und ausgegeben.
Eignet sich auch für ein kleines Gästebuch)

starten (nur online)
 

Beispiel 7.) Auswertung von Radiobuttons und Checkboxes.

starten (nur online)



Perl und UNIX:

In Perl ist es möglich, UNIX-Befehle aufzurufen.
Zum Beispiel kann ein solcher Aufruf folgendermaßen lauten:

Zum Schluß noch ein kleines Beispiel, das die Mächtigkeit des s-Operators in Perl zeigt. Das Programm wandelt eine HTML-Datei in eine Textdatei um, indem es alle Tags löscht.
#! /usr/bin/perl
# wandelt HTML-Text in normalen Text um; alle TAGS werden entfernt
# --------------------------------------------------------------------
print "Bitte die umzuwandelnde Datei: ";
$dateiname=<STDIN>;   # erwartet eine Eingabe des Benutzers
chop($dateiname);     # das Return am Ende entfernen
$neudateiname=$dateiname . ".txt"; # Dateiname der umgewandelten Datei
open(ALTDATEI, $dateiname);
open(NEUDATEI, ">$neudateiname");
while (<ALTDATEI>) {      # alle Zeilen lesen, gelangen nach $_
  chop;                   # Returns am Ende der Zeile entfernen 
  $_ =~ s/<.*?>//g;       # alle Tags löschen
  print NEUDATEI "$_\n";  # in die neue Datei schreiben
}
close(NEUDATEI);
close(ALTDATEI);
print "Ihr Text befindet sich in $neudateiname\n";


Weitere Informationen

Weitere Informationen über die Programmierung in Perl(mit ausführlicher Referenz)
finden Sie unter der Seite: http://www.lehrer.uni-karlsruhe.de/~za186/perl/perl01.htm
oder auf der RAI_CD unter einfuehrungen/perl/perl01.htm.

Weitere Informationen zu UNIX/LINUX finden Sie unter:  http://www.lehrer.uni-karlsruhe.de/~za186/Unix/unix.htm
oder auf der RAI_CD unter einfuehrungen/unix/unix.htm.

Eine Installationsanleitung zu LINUX von Andrea Neumann finden Sie auf der RAI_CD unter Linux/Installation/index.htm oder im Internet unter: http://www.lehrer.uni-karlsruhe.de/~za1641.


Weiteres zu CGI findet man unter der UNIX-Tools-Seite ueber CgiWRAP:



Email: Roland Bernert