|  SELFHTML/Navigationshilfen  Webserver/CGI  CGI | |
|  | CGI-Umgebungsvariablen | 
|   | 
 | 
|   | |
Zur so genannten "CGI-Schnittstelle" gehören auch die CGI-Umgebungsvariablen. Ein installierter  Webserver stellt solche Variablen auf Betriebssystemebene zur Verfügung. Bei jedem Aufruf eines CGI-Scripts füllt er einige dieser Variablen mit Informationen. Das CGI-Script kann den Inhalt dieser Variablen auslesen und für eigene Zwecke nutzen. Das CGI-Script kann einige dieser Variablen auch selbst mit Inhalt füllen oder einen dort gespeicherten Inhalt ändern. CGI-Umgebungsvariablen existieren unabhängig von den Variablen, die Sie in einem CGI-Script selbst definieren können.
 Webserver stellt solche Variablen auf Betriebssystemebene zur Verfügung. Bei jedem Aufruf eines CGI-Scripts füllt er einige dieser Variablen mit Informationen. Das CGI-Script kann den Inhalt dieser Variablen auslesen und für eigene Zwecke nutzen. Das CGI-Script kann einige dieser Variablen auch selbst mit Inhalt füllen oder einen dort gespeicherten Inhalt ändern. CGI-Umgebungsvariablen existieren unabhängig von den Variablen, die Sie in einem CGI-Script selbst definieren können.
In CGI-Umgebungsvariablen ist während der Ausführung eines CGI-Scripts beispielsweise der Namen des Server-Rechners gespeichert oder Information zum verwendeten Browser des Anwenders, der den Aufruf des CGI-Programms verursacht hat. Wenn zum Aufruf des CGI-Scripts aus einem  Formular die GET-Methode verwendet wurde, stehen die Daten, die der Anwender in das Formular eingegeben hat, in einer CGI-Umgebungsvariable (siehe auch den Abschnitt
 Formular die GET-Methode verwendet wurde, stehen die Daten, die der Anwender in das Formular eingegeben hat, in einer CGI-Umgebungsvariable (siehe auch den Abschnitt
 Formulardaten übertragen mit GET oder POST).
 Formulardaten übertragen mit GET oder POST).
Um CGI-Umgebungsvariablen aus einem CGI-Programm heraus zu nutzen, müssen Sie in der verwendeten Programmiersprache die Techniken zum Auslesen von Umgebungsvariablen einsetzen. In Perl können Sie beispielsweise mit einer Anweisung wie print $ENV{'SERVER_NAME'}; den Hostnamen des Servers ausgeben. Perl stellt nämlich alle verfügbaren Umgebungsvariablen in einem vordefinierten  Hash namens
 Hash namens %ENV; zur Verfügung.
Um herauszufinden, welche Umgebungsvariablen auf Ihrem Webserver verfügbar sind, können Sie das folgende kleine Perl-Script verwenden. Den Quellcode können Sie mit einem Texteditor im eingestellten CGI-Verzeichnis beispielsweise unter dem Namen env.pl abspeichern. Angenommen, Vorausgesetzt, Ihr CGI-Verzeichnis heißt wie üblich cgi-bin und der Webserver ist gestartet, dann können Sie das Script im Browser mit der Adresse http://127.0.0.1/cgi-bin/env.pl oder auch mit der Adresse http://localhost/cgi-bin/env.pl aufrufen.
#!/usr/bin/perl -w
use strict;
use CGI::Carp qw(fatalsToBrowser);
print "Content-type: text/html\n\n";
print '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">', "\n";
print "<html><head><title>Umgebungsvariablen</title></head><body>\n";
print "<h1>Umgebungsvariablen:</h1>\n";
print "<table border=\"1\">\n";
print "<tr><th align=\"left\" bgcolor=\"#E0E0E0\">Variablenname</th>",
      "<th align=\"left\" bgcolor=\"#E0E0E0\">Wert</th></tr>\n";
foreach(keys(%ENV)) {
  print "<tr><td><b>$_</b></td><td><tt>$ENV{$_}</tt></td></tr>\n";
}
print "<tr><th align=\"left\" bgcolor=\"#E0E0E0\" colspan=\"2\">insgesamt: ",
      scalar keys(%ENV)," Umgebungsvariablen</th></tr>\n";
print "</table>\n";
print "</body></html>\n";
Das Script erzeugt eine HTML-Tabelle mit allen auf dem Server verfügbaren Umgebungsvariablen. Auf die Perl-Anweisungen wird an dieser Stelle noch nicht näher eingegangen. Nur die erste Zeile des Scripts (die so genannte shebang)  müssen Sie möglicherweise anpassen. Dort, wo im Beispiel #!/usr/bin/perl steht, müssen Sie, falls Sie beim Aufruf eine Fehlermeldung wie Internal Server Error erhalten, den kompletten Pfad zur ausführbaren Datei, also zum Perl-Interpreter, angeben. Wenn Sie den Perl-Interpreter unter MS Windows beispielsweise unter c:\programme\perl installiert haben, lautet Ihre erste Script-Zeile also:
#!c:/programme/perl/bin/perl.
Die Dateinamen-Erweiterung .exe können Sie ohne weiteres weglassen.
Die folgende Tabelle ist nach Variablennamen alphabetisch sortiert.
| Variablenname | Erläuterung | 
|---|---|
| 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-Typ der übergebenen Daten. Wenn das CGI-Script beispielsweise beim Absenden eines HTML-Formulars aufgerufen wurde und dort als Übertragungsmethode POSTangegeben ist, steht in dieser Umgebungsvariablen der für HTML-Formulare typische MIME-Typapplication/x-www-form-urlencoded(zu diesem MIME-Typ siehe auch Datenstrom bei Übertragung von Formulardaten). | 
| DOCUMENT_ROOT | Enthält den physischen Pfad des Wurzelverzeichnisses für die Ablage von Dateien, die im Webserver 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-Typen, die der aufrufende Web-Browser akzeptiert. Die Angabe */*bedeutet: der Web-Browser akzeptiert alles. | 
| HTTP_ACCEPT_CHARSET | Enthält die Liste der Zeichenkodierungen, die der aufrufende Web-Browser akzeptiert, beispielsweise iso-8859-1, utf-8, utf-16, *;q=0.1. | 
| HTTP_ACCEPT_ENCODING | Enthält eine Liste der Kodierungsmethoden, 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-Algorithmus 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) oderen(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-Alivebedeutet, 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 @cookiesenthä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-Typs application/x-www-form-urlencodedgespeichert (zu diesem MIME-Typ 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 den URI 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. Anmerkung: Wenn Ihnen die englische Sprache geläufig ist, werden Sie feststellen, dass HTTP_REFEREReigentlichHTTP_REFERRERheißen müsste. Den Autoren der ersten Spezifikation von HTTP ist dieser Fehler unterlaufen, der sich aus historischen Gründen und aufgrund der Abwärtskompatibilität von HTTP bis heute hält. | 
| 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_INFOden 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/querys/musicbase.sql?cat=Mozart aufgerufen wird, dann enthält diese Umgebungsvariable den Anteil/querys/musicbase.sql. Sie ist dazu gedacht, Dateinamen mit Pfadangabe als Übergabeparameter für Scripts zu ermöglichen. | 
| PATH_TRANSLATED | Enthält wie PATH_INFOden 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 Webserver ü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/querys/musicbase.sql aufgerufen. Dann könnte der zusätzliche Adressanteil /querys/musicbase.sql aus Sicht des Webservers beispielsweise in einen physischen Pfadnamen wie /usr/web/seite/querys/musicbase.sql aufgelöst werden. Diesen Pfadnamen würdePATH_TRANSLATEDzurü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=Stefan aufgerufen. Dann würde QUERY_STRINGden WertUser=Stefanenthalten. Wenn ein Anwender ein HTML-Formular ausgefüllt hat, bei dessen Absenden das CGI-Script mit derGET-Methode aufgerufen wurde, dann stehen in dieser Umgebungsvariablen die ausgefüllten Formulardaten. Die Daten sind nach den Regeln des MIME-Typsapplication/x-www-form-urlencodedkodiert. | 
| REMOTE_ADDR | Enthält die IP-Adresse des Server-Rechners, über den das CGI-Script aufgerufen wurde. Es muss 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 Webserver entsprechend konfiguriert und dazu in der Lage ist, der IP-Adresse den entsprechenden Hostnamen zuzuordnen. Es muss 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 Protokollinformationen, 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 ausführen zu lassen. 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 HTTP-Anfragemethode, mit der das CGI-Programm aufgerufen wurde. Beispielsweise GEToderPOST. Ein CGI-Script kann diese Variable auslesen und danach entscheiden, wie es Formulardaten einlesen kann: entweder von der Standardeingabe (bei MethodePOST) oder aus der UmgebungsvariablenQUERY_STRING(bei MethodeGET). | 
| REQUEST_URI | Enthält den HTTP-Pfad des Scripts inklusive der im Aufruf übergebenen Daten. Angenommen, das Script hat die Adresse http://meine.seite.net/cgi-bin/test.pl und wurde mit http://meine.seite.net/cgi-bin/test.pl?User=Stefan aufgerufen. Dann liefert REQUEST_URIden Wert/cgi-bin/test.pl?User=Stefan. | 
| SCRIPT_FILENAME | Enthält den physischen Pfad des Scripts auf dem Server-Rechner, also z.B. /usr/web/data/cgi-bin/test.pl. | 
| SCRIPT_NAME | Enthält den HTTP-Pfad des Scripts. Angenommen, das Script hat die Adresse http://meine.seite.net/cgi-bin/test.pl. Dann liefertSCRIPT_NAMEden Wert/cgi-bin/test.pl. | 
| SERVER_ADDR | Enthält die IP-Adresse des Server-Rechners. | 
| SERVER_ADMIN | Enthält Namen/E-Mail-Adresse des in der Webserver-Konfiguration eingetragenen Server-Administrators. | 
| SERVER_NAME | Enthält den Namen des Server-Rechners, auf dem das CGI-Script läuft. Normalerweise ist dies der eingetragene Hostname des Rechners. | 
| SERVER_PORT | Enthält die Portnummer, die für den Webserver eingerichtet wurde. Normalerweise ist dies für Webserver die Nummer 80. | 
| SERVER_PROTOCOL | Enthält die Version des HTTP-Protokolls, das der installierte Webserver unterstützt, z.B. HTTP/1.1, wenn die gegenwärtig übliche Version 1.1 des HTTP-Protokolls unterstützt wird. | 
| SERVER_SIGNATURE | Enthält eine erweiterte Selbstauskunft des Servers, z.B. Apache/1.3.31 Server at localhost Port 80. | 
| SERVER_SOFTWARE | Enthält den Namen und die Versionsnummer der Webserver-Software auf dem Server-Rechner. | 
|   | |
|  |  HTML-Formulare und CGI | 
|  |  CGI-Scripts auf öffentlichem Webserver installieren | 
|  SELFHTML/Navigationshilfen  Webserver/CGI  CGI | |
© 2007  Impressum
 Impressum