In English (auf Englisch)
En español (auf Spanisch),
übersetzt durch
René Alvarez
Em português (auf Portugiesen),
übersetzt durch
Claudio F. Chagas
In het Nederlands (auf Niederländisch),
übersetzt durch
Simon Amstel
Stell Dir vor, es ist 16:00 Uhr, und Dein Chef will um 16:30 ein fertiges CGI-Skript sehen. Du weißt bisher nichtmal, was CGI bedeutet. Hier bist Du richtig!
Ein CGI-Skript ist nichts besonderes, abgesehen von dem Hype, der daraus gemacht wird. Wenn Du von STDIN lesen und auf STDOUT schreiben kannst, kannst Du auch CGI-Skripts schreiben. Wenn Du ein bischen Programmieren kannst, wirst Du in ein paar Minuten CGI-Skripts schreiben können. Wenn Du überhaupt nicht programmieren kannst, wirst Du hier nicht viel Hilfe finden - sorry. Lerne irgendeine Sprache (und sei es AppleScript) und komm wieder, wenn Du soweit bist. Viel Glück!
Diese Kurzanleitung konzentriert sich auf die Verarbeitung von HTML-Forms. Einige Details werden nicht behandelt, dafür kommt man um so schneller zum Ziel und deckt 90% der üblichen Anwendungen ab. Bei mehr Interesse guck Dir mal die offiziellen CGI Specs an. Für Hilfe bei der Erstellung von HTML-Forms empfehle ich die Dokumentation der NCSA.
Wenn Du Dich durch diese Seite durchgearbeitet hast, guck Dir noch meine Anmerkungen an.
CGI ist keine Sprache. CGI ist ein simples Protokoll, das man zum kommunizieren zwischen HTML-Forms und einem Programm nutzen kann. Ein CGI-Skript kann in jeder Sprache geschrieben sein - solange sie das Lesen von STDIN, das schreiben auf STDOUT erlaubt und Environment-Variablen lesen kann. (C, Perl, AppleSkript...)
Dies sind die typischen Schritte eines CGI-Skripts:
Der erste und der letzte Schritt sind unten beschrieben - den Rest macht das Programm.
Wenn der User seine Daten übermittelt (Submit-Knopf), erhält Dein Skript alle erzeugten Daten als einen Satz von Name-Wert-Paaren. Der Name ist jeweils der, den Du beim INPUT-Tag festgelegt hast (Oder halt beim SELECT- oder TEXTAREA-Tag), die Werte sind das, was der User eingetragen (oder gewählt) hat.
Dieser Satz von Name-Wert-Paaren (klingt bescheuert!) wird in einem langen String übermittelt, den Dein Programm aufdröseln muß. Das ist nicht sehr kompliziert, und es gibt tausende fertige Routinen dazu. Hier ist eine in Perl, eine einfachere in Perl und eine in C. Das CGI-Directory von Yahoo hat etliche CGI-Routinen und Skripts in den unterschiedlichsten Sprachen.
Wenn Dir das reicht, überspringe den nächsten Abschnitt. Wenn Du es selber machen willst oder neugierig bist siehst Du hier, wie der String aufgebaut ist:
"name1=wert1&name2;=wert2&name3;=wert3"
Du mußt den String also einfach beim Kaufmanns-Und und an den Gleichheitszeichen in Stücke schneiden. In den entstandenen Häppchen muß man
- alle "+" in Leerzeichen wandeln und
- alle "%xx"-Sequenzen in einzelne Buchstaben mit dem ASCII-Wert "xx" wandeln. (Beispiel: "%3D" wird "=")
Das kommt daher, das der übermittelte String in der URL codiert ist. Dem User muß aber die Möglichkeit Kaufmanns-Unde (?) und Gleichheitszeichen übergeben zu können gegeben bleiben.
Wo kriegt man diesen ominösen, langen String nun her? Das hängt von der Methode ab, mit der die HTTP-Form übermittelt wurde:
- Bei GET-Übermittlungen liegt er in der Environment-Variable QUERY_STRING.
- Bei POST-Übermittlungen muß man ihn von STDIN lesen. Die genaue Anzahl übermittelter Bytes steht dabei in der Variablen CONTENT_LENGTH.
(Wenn Du Dich nach den Unterschieden von GET und POST fragst, findest Du in meinem Anmerkungen mehr darüber. Kurzantwort: POST ist wesentlich universeller (und etwas schicker), GET arbeitet bei kleinen Forms aber ganz wunderbar.)
Als erstes gibt man die Zeile
Content-Type: text/html
gefolgt von einer Leerzeile (!) auf STDOUT aus. Nun lässt man eine normale HTML-Antwort folgen, die man ebenfalls auf STDOUT ausgibt. Wenn das Skript beendet ist, sieht der User die so erzeugte Seite.
Ja, man muß richtigen HTML-Quelltext auf STDOUT ausgeben. Das ist nicht schwer: Es ist sogar ziemlich einfach. HTML ist extra als so simpel entwickelt worden, daß man so etwas problemlos hinkriegt.
Wenn Dein Skript statt HTML ein Bild oder andere Binärdaten zurückgeben soll, erfährst Du wieder in meinen Anmerkungen, wie man das macht.
Hast Du gesehen, wie einfach das ist? Wenn Du mir immernoch nicht glaubst, fang an und schreib ein Skript. Tu es auf Deinem Server ins richtige Verzeichnis und mach es ausführbar - mehr Tips findest Du in den Anmerkungen.
Es wäre unfair, Dich ohne ein paar Hinweise auf die Sicherheitsaspekte von CGI-Skripts zu entlassen.
Wenn du mehr über CGI wissen mußt, dann schau dir die CGI-Spezifikation bei NCSA. Auch W3C unterhält eine CGI-Seite mit Verweisen auf Dokumente, die du brauchen könntest.
Oh ja, CGI steht für Common Gateway Interface - mit anderen Worten für eine Standardschnittstelle ("Common Interface") zwischen unterschiedlichen Prozessen (einer Art "Gateway").
Auf der Anmerkungsseite findest Du mehr zu folgenden Themen: