Zur Schnittstelle des CGI gehören automatisch die Umgebungsvariablen. In diesen Variablen, die vom Server bereitgestellt werden, werden zum Beispiel die übergebenen Parameter aus Formularaufrufen gespeichert oder auch Daten der Serverumgebung.
Und wozu brauche ich das nun?
Ganz einfach: Mit Hilfe dieser Umgebungsvariablen können Sie die Eingaben Ihrer Besucher auswerten bzw. über deren Herkunft usw. Auskunft bekommen.
Und wo finde ich die Umgebungsvariablen?
Im Hash %ENV.
Mit folgendem Code können Sie alle Umgebungsvariablen ausgeben lassen:
Laden Sie das Script auf Ihren Server und starten Sie es.
Angezeigt werden alle unterstützten Umgebungsvariablen Ihres Servers.
Zu beachten ist, daß nicht jeder Server alle Variablen unterstützt, Vorsicht also. Im Zweifelsfalle sollten Sie vorher testen, ob alles funktioniert!
Untenstehend finden Sie eine Aufzählung der wichtigsten und gebräuchlichsten Variablen.
CONTENT_LENGTH
Enthält die Anzahl der Zeichen, die beim Aufruf des CGI-Scripts über die POST-Methode übergeben wurden.
Wenn das CGI-Script beispielsweise beim Absenden eines HTML-Formulars aufgerufen wurde und dort als Übertragungsmethode POST angegeben ist, steht in dieser Umgebungsvariablen,
wie viele Zeichen das Script von der Standardeingabe lesen muss, um die übermittelten Formulardaten vollständig einzulesen.
CONTENT_TYPE
Enthält beim Aufruf über die POST-Methode den Mime-Type der übergebenen Daten.
Wenn das CGI-Script beispielsweise beim Absenden eines HTML-Formulars aufgerufen wurde und dort als Übertragungsmethode POST angegeben ist, steht in dieser Umgebungsvariablen der für HTML-Formulare typische Mime-Type application/x-www-form-urlencoded (zu diesem Mime-Type siehe auch Datenstrom bei Übertragung von Formulardaten).
DOCUMENT_ROOT
Enthält den physischen Pfad des Wurzelverzeichnisses für die Ablage von Dateien, die im Web-Server aufrufbar sind. Ein CGI-Script kann aus dieser Angabe beispielsweise absolute Pfadnamen zum Öffnen von Dateien errechnen.
GATEWAY_INTERFACE
Enthält die Version der CGI-Schnittstelle, die von dem installierten Server unterstützt wird, z.B. CGI/1.1, wenn die gegenwärtig übliche Version 1.1 der Schnittstellendefinition unterstützt wird.
HTTP_ACCEPT
Enthält die Liste der Mime-Types, die der aufrufende Web-Browser akzeptiert.
Die Angabe */* bedeutet: der Web-Browser akzeptiert alles.
HTTP_ACCEPT_CHARSET
Enthält die Liste der Zeichensätze, die der aufrufende Web-Browser akzeptiert, beispielsweise iso-8859-1,*,utf-8.
HTTP_ACCEPT_ENCODING
Enthält eine Liste der Kodierungs-Methoden, die der aufrufende Browser akzeptiert.
Manche Browser akzeptieren beispielsweise auch den Kodierungstyp gzip, was bedeutet, dass der Browser auch Dateien empfangen kann, die nach dem GNU-Zip-Alghorithmus komprimiert an ihn übertragen werden.
HTTP_ACCEPT_LANGUAGE
Enthält, welche Landessprache der aufrufende Browser bei seiner Benutzeroberfläche verwendet.
Häufige Werte sind z.B. de (für deutschsprachige Browser) oder en (für englischsprachige Browser).
Ein CGI-Script kann aufgrund dieser Angabe beispielsweise entscheiden, ob es eine deutschsprachige oder eine englischsprachige Antwort an den Browser sendet.
HTTP_CONNECTION
Enthält Informationen über den Status der HTTP-Verbindung zwischen Server und aufrufendem Browser.
Der Wert Keep-Alive bedeutet, der Browser wartet auf Antwort.
HTTP_COOKIE
Enthält Namen und Wert von Cookies, sofern solche vom aufrufenden Browser gesendet werden.
Mit der Perl-Anweisung:
my @cookies = split(/[;,]\s*/,$ENV{'HTTP_COOKIE'});
können Sie alle gesetzten Cookies ermitteln. Jedes Element des Arrays namens @cookies enthält dann jeweils einen Cookie, bestehend aus einem Namen und einem Wert, die durch ein Gleichheitszeichen = getrennt sind. Der Wert eines Cookies ist im Format des Mime-Types application/x-www-form-urlencoded gespeichert (zu diesem Mime-Type siehe auch Datenstrom bei Übertragung von Formulardaten).
HTTP_HOST
Enthält den Domain-Namen oder die IP-Adresse aus der Adresszeile des aufrufenden Browsers.
Für ein CGI-Script kann diese Angabe wichtig sein, falls es mehrere Server bedienen muss.
HTTP_REFERER
Enthält die Adresse der Web-Seite, von der aus das CGI-Script aufgerufen wurde.
Der Wert wird jedoch nicht von allen Web-Browsern korrekt übermittelt, ist also nicht in jedem Fall verfügbar.
HTTP_USER_AGENT
Enthält Produkt- und Versionsinformationen zum aufrufenden Web-Browser.
Ein CGI-Script kann auf diese Weise ermitteln, welchen Browser ein Anwender verwendet.
PATH_INFO
Wird einem CGI-Script eine Zeichenkette mit Daten übergeben, dann enthält PATH_INFO den Teil der Zeichenkette nach dem Namen des Scripts bis zum ersten ?. Wenn das Script beispielsweise die Adresse http://meine.seite.net/cgi-bin/test.pl hat, aber mit http://meine.seite.net/cgi-bin/test.pl/ordner/datei.txt?cat=kategorie1 aufgerufen wird, dann enthält diese Umgebungsvariable den Anteil /ordner/datei.txt. Sie ist dazu gedacht, Dateinamen mit Pfadangabe als Übergabeparameter für Scripts zu ermöglichen.
PATH_TRANSLATED
Enthält wie PATH_INFO den Anteil des URI nach dem Scriptnamen bis zum ersten ?, jedoch mit dem Unterschied, dass nicht der Anteil selbst aus dem URI zurückgegeben wird, sondern der vom Web-Server übersetzte Datenpfad dieses Anteils. Angenommen, das Script hat die Adresse http://meine.seite.net/cgi-bin/test.pl, wurde aber mit http://meine.seite.net/cgi-bin/test.pl/ordner/datei.txt aufgerufen. Dann könnte der zusätzliche Adressanteil /ordner/datei.txt aus Sicht des Web-Servers beispielsweise in einen physischen Pfadnamen wie /usr/web/seite/ordner/datei.txt aufgelöst werden. Diesen Pfadnamen würde PATH_TRANSLATED zurückgeben.
QUERY_STRING
Enthält eine Zeichenkette mit Daten, die dem Script im URI nach dem ersten ? übergeben wurden. Angenommen, das Script hat die Adresse http://meine.seite.net/cgi-bin/test.pl, wurde aber mit http://meine.seite.net/cgi-bin/test.pl?User=User aufgerufen. Dann würde QUERY_STRING den Wert User=User enthalten. Wenn ein Anwender ein HTML-Formular ausgefüllt hat, bei dessen Absenden das CGI-Script mit der GET-Methode aufgerufen wurde, dann stehen in dieser Umgebungsvariablen die ausgefüllten Formulardaten. Die Daten sind nach den Regeln des Mime-Types application/x-www-form-urlencoded kodiert.
REMOTE_ADDR
Enthält die IP-Adresse des Server-Rechners, über den das CGI-Script aufgerufen wurde. Es muß sich hierbei nicht unbedingt um die IP-Adresse des aufrufenden Client-Rechners handeln - der Wert kann beispielsweise auch von einem Proxy-Server stammen.
REMOTE_HOST
Enthält den Hostnamen des Rechners, über den das CGI-Script aufgerufen wurde. Dieser Wert wird jedoch nur gesetzt, wenn der Web-Server entsprechend konfiguriert und dazu in der Lage ist, der IP-Adresse den entsprechenden Hostnamen zuzuordnen. Es muß sich hierbei nicht unbedingt um die IP-Adresse des aufrufenden Client-Rechners handeln - der Wert kann beispielsweise auch von einem Proxy-Server stammen.
REMOTE_IDENT
Enthält Protokollinformation, wenn auf dem Server das Protokoll ident für geschützte Zugriffe läuft.
REMOTE_PORT
Ermittelt, über welchen Port des Client-Rechners das CGI-Script aufgerufen wurde.
Diese Zahl liegt gewöhnlich im Bereich ab 1024 aufwärts und wird vom aufrufenden Web-Browser
zufällig ausgewählt.
REMOTE_USER
Enthält den Benutzernamen, mit dem sich der aufrufende Benutzer angemeldet hat, um das CGI-Script aufzurufen.
Wenn das Script beispielsweise htaccess-geschützt ist, muss sich der aufrufende Benutzer mit Benutzernamen und Passwort anmelden. Der dabei eingegebene Benutzername kann mit dieser Variable ermittelt werden.
REQUEST_METHOD
Enthält die Methode der Anfrage, mit der das Script aufgerufen wurde.
Beispielsweise GET oder POST.
Ein CGI-Script kann diese Variable auslesen und danach entscheiden,
wie es Formulardaten einlesen kann: entweder von der Standardeingabe (bei Methode POST) oder aus der Umgebungsvariablen QUERY_STRING (bei Methode GET).
REQUEST_URI
Enthält die vollständige HTTP-Adresse Ihres Scripts mit den im Aufruf übergebenen Daten.
Angenommen, Ihr Script hat die Adresse
http://meine.seite.net/cgi-bin/meinscript.pl und wurde mit
http://meine.seite.net/cgi-bin/meinscript.pl?User=User aufgerufen.
Dann liefert die Variable REQUEST_URI den Wert /cgi-bin/meinscript.pl?User=User.
SCRIPT_NAME
Enthält die vollständige HTTP-Adresse des Scripts.
Angenommen, Ihr Script hat die Adresse http://meineseite.de/cgi-bin/meinscript.pl.
Dann liefert SCRIPT_NAME den Wert /cgi-bin/meinscript.pl.
SCRIPT_FILE_NAME
Enthält den physikalischen Pfad Ihres Scripts auf dem Server, also z.B. /usr/web/data/cgi-local/meinscript.pl
SERVER_ADDR
Enthält die IP-Adresse des Servers.
SERVER_ADMIN
Enthält den Namen und die Mailadresse des Server-Administrators.
SERVER_NAME
Enthält den Namen des Servers, auf dem das CGI-Script läuft.
Normalerweise ist dies der eingetragene Hostname des Rechners.
SERVER_PORT
Die Portnummer, auf die der Webser reagiert.
Normalerweise ist dies für Web-Server die Nummer 80.
SERVER_PROTOCOL
Version des HTTP-Protokolls, das der installierte Web-Server unterstützt, z.B. HTTP/1.1,
SERVER_SIGNATURE
Eine erweiterte Selbstauskunft des Servers, z.B. Apache/1.3.14 Server at localhost Port 80.
SERVER_SOFTWARE
Der Name und die Versionsnummer der Software auf Ihrem Server.