This page has been robot translated, sorry for typos if any. Original content here.

Alles über CGI (Common Gateway Interface)

Was ist CGI?

Beginnen Sie mit der Terminologie. CGI - Commom Gateway Interface ist eine Schnittstelle, die es einem Webserver ermöglicht, auf Anforderung eines Browsers alle Programme auf sich selbst zu starten und das Ergebnis seiner Arbeit dem Browser anzuzeigen . CGI-Programm (Skript) - ein Programm (Skript), das auf dem Server ausgeführt wird und ebenfalls über die obige Schnittstelle mit dem Browser kommuniziert. Da es keine strenge Regulierung der Begriffsdefinitionen gibt, gibt es oft CGI zu sagen, wegen des Programms (Skripts), nicht jedoch der Schnittstelle selbst.

Wenn dies ein Programm ist, sollte es in der Lage sein, ein beliebiges ausführbares Format zu verwenden, das für ein bestimmtes Betriebssystem akzeptabel ist. Programme können auf alles geschrieben werden: C / C ++, Pascal, Java, Visual, nur Basic, Delphi usw.

Wenn es sich um ein Skript (Skript) handelt, muss auf dem Betriebssystem, unter dem sich der Webserver dreht, ein entsprechender Skript-Interpreter vorhanden sein: Shell, Perl, Tcl / Tk, Command.com usw.

Um ein CGI-Programm (Skript) zu entwickeln, wurden im Allgemeinen folgende Anforderungen erfüllt: - Aus dem Standardeingangsstrom (stdin) sprechen lassen. - Werte der Umgebungsvariablen (Umgebungsvariablen) abrufen.

Wofür wird CGI verwendet?

  • Arbeiten Sie mit Referenzsystemen und Datenbanken.
  • Erstellen dynamischer HTML-Dokumente und -Ressourcen (einschließlich Zähler, Gästebücher usw.)
  • Remote-Administration verschiedener Systeme.
  • Einfach nur mit verschiedenen Programmen arbeiten, da die HTML-Benutzeroberfläche sehr bequem zu bedienen ist, einfach zu erstellen ist und auch gut aussieht :)

CGI-Programme zum Arbeitsmechanismus

Wie bereits erwähnt, erhält CGI Eingaben aus dem Standardeingabestrom stdin oder aus Umgebungsvariablen, gibt jedoch die Ergebnisse seiner Arbeit an den Standardschlussstrom stdout aus . Für die Wer weiß nicht, was es ist: Standardeingabestrom (stdin) - daher holt das Programm (Skript) standardmäßig die Eingabeinformationen ein. Normalerweise handelt es sich hierbei um eine Tastatur, sie kann jedoch erneut zugewiesen werden, und ein Programm (Skript) erfasst die Eingabedaten von einer Datei, einem Socket und dem Ausgabestrom eines anderen Programms.

Umgebungsvariablen sind die für das System und den Server definierten Variablen, auf denen die CGI ausgeführt wird. .

Standardausgabestrom (stdout) - hier zeigt das Programm (Skript) die Ergebnisse seiner Arbeit an. Dies ist in der Regel ein „Monitor“, es darf jedoch einer Datei, einem Socket, einem Eingabestrom eines anderen Programms, einem Drucker usw. neu zugewiesen werden.

Die meisten Beispiele in diesem Handbuch sind in die Shell geschrieben, um die Präsentation des Materials zu vereinfachen.

Aufgrund der endgültigen Sicherheitstrends wird die Verwendung einer Shell zum Schreiben von CGI-Skripts nicht empfohlen .

1.1 Aufruf von CGI ohne Parameter

Das einfachste Skript zum Anzeigen des aktuellen Datums ist: #!/bin/sh echo Content-type: text/html echo echo " Today is " date echo " "

#!/bin/sh echo Content-type: text/html echo echo " Today is " date echo " "

#!/bin/sh echo Content-type: text/html echo echo " Today is " date echo " " Im HTML-Act wird der Link dazu so beschrieben <a href = http: //translate.googleusercontent.com/translate_c? depth = 1 & amp; hl = de & amp; hp & amp; rurl = translate.google.com & amp; sl = ru & amp; sp = nmt & amp; http: //www.shram.

WICHTIGE HINWEISE Der grundlegende Fehler, den fast alle machen, die mit dem Schreiben von CGI-Programmen oder Skripts beginnen, besteht darin, dass sie vergessen, einen Zeiger auf den Typ des Ausgabeergebnisses einzufügen - den Titel des Ausgabedokuments. Dies ist auch die dritte Zeile im Beispiel.

echo Inhaltstyp: text / html echo Dabei ist Content-Typ: der Typ des Ausgabevorgangs (Text / HTML, Image / Gif, Image / JPEG, usw.).
Die leere Zeile in der Schlussfolgerung drückt aus, dass das Ende der Überschrift auch dem tatsächlichen Dokument selbst folgt.

1.2 Übergabe von CGI-Parametern an ein Skript oder ein Programm

Die Parameterübergabe erfolgt durch einige grundlegende Methoden: GET und POST . Jeder von ihnen hat seine Vor- und Nachteile.

Bei der Verwendung von GET werden die Parameter zur angeforderten URL hinzugefügt und können auch folgendermaßen aufgerufen werden:

http: // some_host / cgi-bin / some_script - Optionen So können Sie auf solche Skript-Links in HTML-Dokumenten reagieren. Auf dem Server werden die übergebenen Parameter der Variablen QUERY_STRING zugewiesen.

Skripttext selbst: #!/bin/sh echo Content-type: text/html echo echo " Вы посылали вот это: " echo " " set | grep QUERY_STRING echo "
" echo " Environment
" set echo ""</code> и как он вызывался из этого документа: <a href=http://translate.googleusercontent.com/translate_c?depth=1&amp;hl=ru&amp;prev=hp&amp;rurl=translate.google.com&amp;sl=ru&amp;sp=nmt4&amp;tl=de&amp;u=http://www.shram.kiev.ua/cgi-bin/examples/link.cgi%3Fsome_parameters&amp;xid=17259,15700019,15700124,15700149,15700186,15700191,15700201,15700237,15700242&amp;usg=ALkJrhjkLaWga049PSsZJZ8g4853CBv7PQ> Образец труда (ткните тут) </a>

#!/bin/sh echo Content-type: text/html echo echo " Вы посылали вот это: " echo " " set | grep QUERY_STRING echo "
" echo " Environment
" set echo ""</code> и как он вызывался из этого документа: <a href=http://translate.googleusercontent.com/translate_c?depth=1&amp;hl=ru&amp;prev=hp&amp;rurl=translate.google.com&amp;sl=ru&amp;sp=nmt4&amp;tl=de&amp;u=http://www.shram.kiev.ua/cgi-bin/examples/link.cgi%3Fsome_parameters&amp;xid=17259,15700019,15700124,15700149,15700186,15700191,15700201,15700237,15700242&amp;usg=ALkJrhjkLaWga049PSsZJZ8g4853CBv7PQ> Образец труда (ткните тут) </a>

#!/bin/sh echo Content-type: text/html echo echo " Вы посылали вот это: " echo " " set | grep QUERY_STRING echo "
" echo " Environment
" set echo ""</code> и как он вызывался из этого документа: <a href=http://translate.googleusercontent.com/translate_c?depth=1&amp;hl=ru&amp;prev=hp&amp;rurl=translate.google.com&amp;sl=ru&amp;sp=nmt4&amp;tl=de&amp;u=http://www.shram.kiev.ua/cgi-bin/examples/link.cgi%3Fsome_parameters&amp;xid=17259,15700019,15700124,15700149,15700186,15700191,15700201,15700237,15700242&amp;usg=ALkJrhjkLaWga049PSsZJZ8g4853CBv7PQ> Образец труда (ткните тут) </a>

#!/bin/sh echo Content-type: text/html echo echo " Вы посылали вот это: " echo " " set | grep QUERY_STRING echo "
" echo " Environment
" set echo ""</code> и как он вызывался из этого документа: <a href=http://translate.googleusercontent.com/translate_c?depth=1&amp;hl=ru&amp;prev=hp&amp;rurl=translate.google.com&amp;sl=ru&amp;sp=nmt4&amp;tl=de&amp;u=http://www.shram.kiev.ua/cgi-bin/examples/link.cgi%3Fsome_parameters&amp;xid=17259,15700019,15700124,15700149,15700186,15700191,15700201,15700237,15700242&amp;usg=ALkJrhjkLaWga049PSsZJZ8g4853CBv7PQ> Образец труда (ткните тут) </a>
<code>#!/bin/sh echo Content-type: text/html echo echo " Вы посылали вот это: " echo " <b>" set | grep QUERY_STRING echo "</b> <br> " echo " <b>Environment</b> <br> " set echo ""&lt;/code&gt; и как он вызывался из этого документа: &lt;a href=http://translate.googleusercontent.com/translate_c?depth=1&amp;amp;hl=ru&amp;amp;prev=hp&amp;amp;rurl=translate.google.com&amp;amp;sl=ru&amp;amp;sp=nmt4&amp;amp;tl=de&amp;amp;u=http://www.shram.kiev.ua/cgi-bin/examples/link.cgi%3Fsome_parameters&amp;amp;xid=17259,15700019,15700124,15700149,15700186,15700191,15700201,15700237,15700242&amp;amp;usg=ALkJrhjkLaWga049PSsZJZ8g4853CBv7PQ&gt; Образец труда (ткните тут) &lt;/a&gt;</code> #!/bin/sh echo Content-type: text/html echo echo " Вы посылали вот это: " echo " " set | grep QUERY_STRING echo "
" echo " Environment
" set echo ""</code> и как он вызывался из этого документа: <a href=http://translate.googleusercontent.com/translate_c?depth=1&amp;hl=ru&amp;prev=hp&amp;rurl=translate.google.com&amp;sl=ru&amp;sp=nmt4&amp;tl=de&amp;u=http://www.shram.kiev.ua/cgi-bin/examples/link.cgi%3Fsome_parameters&amp;xid=17259,15700019,15700124,15700149,15700186,15700191,15700201,15700237,15700242&amp;usg=ALkJrhjkLaWga049PSsZJZ8g4853CBv7PQ> Образец труда (ткните тут) </a>
<code>#!/bin/sh echo Content-type: text/html echo echo " Вы посылали вот это: " echo " <b>" set | grep QUERY_STRING echo "</b> <br> " echo " <b>Environment</b> <br> " set echo ""&lt;/code&gt; и как он вызывался из этого документа: &lt;a href=http://translate.googleusercontent.com/translate_c?depth=1&amp;amp;hl=ru&amp;amp;prev=hp&amp;amp;rurl=translate.google.com&amp;amp;sl=ru&amp;amp;sp=nmt4&amp;amp;tl=de&amp;amp;u=http://www.shram.kiev.ua/cgi-bin/examples/link.cgi%3Fsome_parameters&amp;amp;xid=17259,15700019,15700124,15700149,15700186,15700191,15700201,15700237,15700242&amp;amp;usg=ALkJrhjkLaWga049PSsZJZ8g4853CBv7PQ&gt; Образец труда (ткните тут) &lt;/a&gt;</code>

Es ist inakzeptabel, die GET- Methode zum Übergeben von Parametern zu verwenden, die vertrauliche Informationen enthalten In diesem Fall werden alle diese Informationen offen übermittelt.

Mit der POST- Methode können Sie die Vertraulichkeit gewährleisten, wenn Sie Parameter an das Skript übergeben. Die Parameter werden jedoch an den Standardeingabestrom übergeben, und dafür müssen Formulare verwendet werden. Der Server sendet das EOF-Skript am Ende der Übertragung nicht. Stattdessen müssen Sie die Variablenumgebung CONTENT_LENGTH verwenden, um zu bestimmen, welche Datenkapazität Sie aus stdin berechnen müssen.

Zeilenzähler

In letzter Zeit wächst die Anzahl der Menschen, die einen Besucher-Counter an ihre Seite anhängen möchten, in einem rasenden Tempo. Im Internet gibt es viele Orte, an denen die Benutzer die für ihr Betriebssystem beliebigen Zähler nehmen und auf ihre Seiten schrauben können.

Dieser Leitfaden des Handbuchs wird höchstwahrscheinlich für diejenigen hilfreich sein, die sich für den Mechanismus der Arbeit der Zähler interessieren, da alle beigefügten Beispiele spezielle Tricks in Bezug auf Einstellungen, Verwaltung usw. haben. nicht besitzen Sehen Sie sich Altavista, Yahoo und andere Suchmaschinen für anspruchsvollere, einsatzbereite Zähler an. Oder fragen Sie in den entsprechenden Pressekonferenzen (relcom.www.users/relcom.www.support; in fidosh ekhah ru.internet. *).

2.1 Zählertypen

Je nach Arbeitsmechanismus können die Zähler in ein Paar von Typen unterteilt werden:
  1. CGI-Skripts, die als Server Side Include arbeiten
  2. CGI-Skripts, die kein serverseitiges Include verwenden
Server Side Include (SSI) ist ein HTML-Kommentartyp, der dem Webserver anzeigt, dass dynamisch erzeugte Daten im Anrufsaal ersetzt werden müssen. Das grundlegende Format eines SSI-Aufrufs im Hauptteil eines HTML-Dokuments lautet wie folgt:

<!--#command tag="value"...-->

Dabei ist #Befehl einer der zahlreichen Befehle, die der Webserver versteht. In diesem Fall ist der Befehl #exec am interessantesten, mit dem Sie Programme ausführen und auch die Ergebnisse ihrer Arbeit ersetzen können. Die vom Webserver analysierten HTML-Dokumente werden als vom Server analysierte Dokumente bezeichnet.

2.2 Besucherzähler als SSI

Ein Arbeitsalgorithmus:

  1. Der Server erhält vom Browser eine Anforderung für ein HTML-Dokument.
  2. Der Server zeigt den Vorgang für einen SSI-Anruf an.
  3. Wenn solche Anrufe erkannt werden, wird das Ergebnis vor Ort ersetzt. Im Falle des Befehls #exec wird das Ergebnis der Arbeit des Programms in "Wert" angegeben .
  4. Der generierte HTML-Act wurde wieder im Browser gestartet.

Erforderliche Servereinstellungen (auf dem Apache- Beispielserver):

  1. Registrieren Sie sich in der Datei srm.conf (falls noch nicht dort geschrieben): AddType text / html .shtml AddHandler Server-analysiertes .shtml Diese Anweisungen geben dem Server aus, dass Dateien mit der Erweiterung .shtml vom Server analysierte Dokumente sind.
  2. Fügen Sie in der Datei access.conf in dem Verzeichnis, in dem sich vom Server analysierte Dokumente befinden, in Optionen die Option Includes hinzu.
  3. Weisen Sie die Erweiterung .shtml den Dateien zu, die SSI-Aufrufe enthalten (siehe § 1).
Lassen Sie uns den Counter-Vorgang mit dem im Internet gefundenen Beispiel- Counter- Skript unter http://www.webtools.org/ demonstrieren. Es ist in Perl geschrieben, was heute so beliebt ist.

Von hier aus berechnen wir: <! - # exec cgi = "/ cgi-bin / counter" ->
(klicken Sie auf Neu laden, bis Sie sich langweilen)

Dies ist ein Textzähler, d. H. Das Skript gibt nur den Text an, der angezeigt wird. Ebenso ist es erlaubt, Bilder einzuschließen. Dazu ist es notwendig, dass die Tags img src = "picture_ with_sotvetsvuyu_tsifroy" sind. Der neugierige Leser wird leicht erraten, dass die Anzahl der Tags img src ... der Anzahl der Ziffern im vom Zähler zurückgegebenen Wert entspricht.

Der Aufruf dieses Zählers im Hauptteil der Aktion wird durch den Befehl ausgeführt: <!--#exec cgi="/cgi-bin/counter"-->

2.3 Der Zähler verwendet kein SSI

Aus der Sicht des Anwenders genialer, aber komplizierter bei der Programmierung ist der Zähler, der SSI nicht verwendet. Der Mechanismus eines solchen Zählers ist folgender:

  • Der Rumpf des HTML-Acts gibt an: &lt;img src = / cgi-bin / beispiele / counter.cgi&gt; d.h. Das angeforderte Bild ist keinesfalls statisch, sondern wird dynamisch von einem CGI-Skript generiert.
  • Der Server, der eine Bildanforderung erhält, führt das im src- Tag img angegebene Skript aus.
  • Das Skript erhöht den Zählerwert pro Stück, erzeugt ein Bild mit dem Zählerwert und gibt es auch an den Browser.

Da dieser Zählertyp im Internet am beliebtesten ist, betrachten wir den Algorithmus seiner Arbeit genauer.

Bei crypts ( counter.cgi ), das im Rumpf eines HTML-Dokuments vom Tag img src = "... counter.cgi" aufgerufen wird, wird auch der folgende Quelltext in die Shell geschrieben (Zeilennummern werden nur zur Vereinfachung der Erklärung hinzugefügt): 1: #!/bin/sh 2: now=`date -u` 3: echo "Content-type: image/gif;" 4: echo "Expires: $now" 5: echo 6: counter|showdigits 1: #!/bin/sh 2: now=`date -u` 3: echo "Content-type: image/gif;" 4: echo "Expires: $now" 5: echo 6: counter|showdigits

Dieses Skript ist gültig (Zeilenbeschreibung):
1 - Der Titel des Skripts. Er zeigt auf den Befehlsinterpreter, den er ausführen wird.

2 - Definieren Sie die now- Variable, die die Zeit angibt, zu der das Skript ausgeführt wurde (die Zeit zum Erstellen des Images). Der Schlüssel " -u " besagt, dass das Datum und die Uhrzeit der Erstellung in GMT angezeigt werden. Warum sollte dies unten beschrieben werden.

3 - Wir versuchen, einen Server-Widerspruchs-Header zu bilden. Geben Sie den Typ der zurückgegebenen Daten an: image / gif

4 - Da es sich um einen Zähler handelt, muss sichergestellt werden, dass die Karte mit ihren Messwerten in keiner Weise zwischengespeichert wird (und welche später als dieser Zähler ist) :) . Dazu weisen wir darauf hin, dass das vom Browser empfangene Bild sofort zu bespritzen ist. Hier verwenden wir auch die jetzt in Zeile 2 definierte Variable. Die Verwendung von Expires in dieser Form entspricht dem Standard für das HTTP-Protokoll Version 1.1. Bei Verwendung von Expires gleich dem Erstellungsdatum des Akts können jedoch lustige Störungen auftreten, wenn die Uhr des Kunden einige Minuten hinter der Serveruhr liegt. Das Dilemma beginnt - gemäß dem Standard soll es so sein, aber es ist nicht das, was wir brauchen. Was zu tun ist? In der vorherigen Version des Protokolls (HTTP 1.0) konnte Expires auf 0 gesetzt werden. RFC2068 gibt jedoch an, dass Clients, die HTTP-1.1-Caches verwenden, eine alte Variante der Verwendung von Expires unterstützen müssen (Expires: 0). Also, liebe Russen, entscheidet selbst.

5 - Ende des Widerspruchskopfs - Rückgabe einer leeren Zeichenfolge.

6 - Mit zwei Programmen (Zähler auch showdigits) erzeugen Sie das Bild selbst.

Die Zählerprogramme werden ebenfalls in C geschrieben, wobei die Bibliothek zum Arbeiten mit GIF-Dateien - libgd - verwendet wird. Ohne dieses Programm wird das Programm nicht kompiliert. Die neueste Version der Bibliothek ist immer unter http://www.boutell.com/gd/ verfügbar.

Diese Programme sind gültig:

  • counter - liest aus der Datei counter.rc die Menge, die den vorherigen Wert des Zählers darstellt, addiert sie und kritzelt auch zurück. Wenn auch die Route zu den Dateien - Bilder mit Nummern nicht angegeben wird, wird auch die Maske dieser Dateien verwendet. Dann wird die Standardeinstellung verwendet, die im Programmhauptteil definiert ist. Danach berechnete er den Wert des Zählers und auch die Route zu den Bildern wurde in stdout ausgegeben, die die Befehlszeile für showdigits bildet.
  • showdigits - dieses Programm bildet tatsächlich auch ein Bild mit dem aktuellen Zählerstand. Zu diesem Zweck wird ein Satz von vorgefertigten Bildern mit Zahlen (GIF-Format, alle Bilder der gleichen Größe) ebenfalls von stdin aus Zählerdaten empfangen. Entlang der Route werden sowohl die Maske als auch die Anzahl aufgenommen, die notwendigen Bilder werden ebenfalls eine Hyphe von ihnen gesammelt. Dann geht er direkt zu ... stdout ! Und dann leitet der Server diesen Stream auch an den Browser (den Browser) weiter, der ihn als Bild darstellt, da der Titel des Widerspruchs darauf hinweist, dass es sich um eine Hypha handelt.
Die Essenz hier ist: - Der Server sendet einen Datenstrom an den Browser. - Der Browser kümmert sich nicht wirklich darum, wo der Datenstrom neben dem Server (der statisch oder dynamisch generiert wird; eine reguläre Datei oder das Ergebnis des Skripts) an den Server übertragen wird. Die Hauptsache ist, dass der Browser sie richtig interpretieren kann. Dafür ist der Titel, der in diesem Beispiel vom counter.cgi- Skript erzeugt wurde, aber genau in 3-5 Zeilen (siehe oben). Bei statischen Dateien generiert der Server selbst diesen Header auf der Grundlage seiner eigenen Einstellungen. Bei cgi muss dies jedoch vom Skript selbst vorgenommen werden.

Serverseite beinhaltet

Es ist klar, dass statische HTML-Dokumente gut sind, dynamisch erstellte Dokumente jedoch noch besser. :) In diesem Abschnitt sprechen wir also über die dynamische Erstellung von Dokumenten mit serverseitigen Inklusen. Sofort stellen wir fest, dass die Fähigkeit zur Verwendung von SSI die Fähigkeit jedes einzelnen Servers ist. Einige Server unterstützen SSI in keiner Weise, aber Server mit dieser Funktion haben möglicherweise andere Formate für Befehlssätze. Lesen Sie also das Handbuch für Ihren Webserver. Alle Beispiele in diesem Kapitel beziehen sich auf Apache.

3.1 Was ist SSI?

Wie bereits im vorigen Kapitel erwähnt, handelt es sich beim Server Side Include (SSI) um eine Webserveranweisung, mit der der Server alle Daten für einen Anruf ersetzen kann. In einem HTML-Vorgang sieht ein SSI-Aufruf wie ein Formatkommentar aus:

<!--#command tag="value"...-->

Dabei ist #Befehl eine der SSI-Direktiven, die der Webserver versteht, aber " Wert " sind seine Parameter.

Die Ersatzdaten können statisch sein und auch dynamisch generiert werden. Statische Daten sind bereits bereit, als Dateien, Textfragmente oder HTML-Dateien aufgezeichnet. Es ist zweckmäßig, solche Daten in dem Fall zu verwenden, in dem wiederholte Fragmente in verschiedenen HTML-Dokumenten platziert werden. Dynamisch generierte Daten sind das Ergebnis der Arbeit aller CGI-Skripts oder -Befehle des Betriebssystems, auf dem der jeweilige Webserver ausgeführt wird. Die Verwendung dieser Art von Daten bietet dem Webentwickler große Chancen. Aber, wie die schwachsinnige russisch-bürgerliche Anzeige sagt: "Vergessen Sie keine zuckerfreien Orbits!". Ich meine, ERINNERUNG ÜBER MASSNAHMEN ZUR EINHALTUNG DER SICHERHEITEN AUF INFORMATIONEN! Die falsche Verwendung von SSI kann zu unbefugtem Zugriff auf Informationen und folglich zu verschiedenen schwerwiegenden Folgen führen. .

3.2 Grundlegende SSI-Richtlinien

config steuert verschiedene Aspekte der Analyse eines Dokuments. Attribute: errmsg-Fehlernachricht , die an den Client zurückgegeben wurde, falls während der Analyse des Dokuments ein Fehler aufgetreten ist. sizefmt legt das Dateigrößenabschlussformat (Bytes, Kilobytes, Megabytes) fest. timefmt legt das Datums- / Zeitformat fest. echo druckt den Wert einer der folgenden Umgebungsvariablen. Attribute: var name der gedruckten exec- Variable führt den angegebenen Befehl oder das angegebene CGI-Skript aus. Attribute: cgi ist angegeben (% -codiert) URL-relative Route zum CGI-Skript. Wenn die Route nicht mit (/) beginnt, wird davon ausgegangen, dass die Route relativ zum aktuellen Dokument angegeben ist.

Das CGI-Skript wird übergeben, sodass die Werte der Variablen PATH_INFO und QUERY_STRING der ursprünglichen Clientanforderung übertragen werden.

Der cmd- Server führt die angegebene Zeichenfolge mit dem Betriebssystembefehlsinterpreter aus. fsize druckt die Größe der angegebenen Datei, einschließlich sizefmt . Attribute: file gibt die Route zu der Datei relativ zum aktuellen Verzeichnis an, das die analysierte Datei enthält. virtual gibt die (% -codierte) URL-relative Route zur Datei an. Wenn die Route nicht mit (/) beginnt, wird davon ausgegangen, dass die Route relativ zum aktuellen Dokument angegeben ist. flastmod gibt das Datum und die Uhrzeit der endgültigen Änderung der angegebenen Datei unter Berücksichtigung von timefmt aus . Attribute sind bla wie der Befehl fsize . include fügt den Text eines anderen Akts oder einer anderen Datei in das zu analysierende Dokument ein. Sehr nützlich für die Wiederholung von Fragmenten in verschiedenen Dokumenten. Attribute: file gibt den Pfad zur Datei nur relativ zum aktuellen Verzeichnis an, das die zu analysierende Datei enthält. virtual gibt die (% -codierte) URL-relative Route zur Datei an. Wenn die Route nicht mit (/) beginnt, wird davon ausgegangen, dass die Route relativ zum aktuellen Dokument angegeben ist. In Apache können auf diese Weise enthaltene Dateien als verschachtelte Dateien vorhanden sein. printenv gibt eine Liste aller vorhandenen Variablen und ihrer Werte aus. Keine Attribute Beispiel:
<!--#printenv --> set setzt den Wert einer Variablen. Attribute: var gibt den Namen der zu setzenden Variablen an. value gibt den Wert der einzustellenden Variablen an. Beispiel:
<!--#set var="variable_1" value="some_value_of_variable_1" -->

3.3 SSI-Umgebungsvariablen

DOCUMENT_NAME - Dateiname Beschreibung im Hauptteil des Dokuments: <!--#echo var="DOCUMENT_NAME" --> Ergebnis der Verwendung: <! - # echo var = "DOCUMENT_NAME" ->

DOCUMENT_URI - virtuelle Route zur Datei Beschreibung im Hauptteil des Dokuments: <!--#echo var="DOCUMENT_URI" --> Ergebnis der Verwendung: <! - # echo var = "DOCUMENT_URI" ->

QUERY_STRING_UNESCAPED - Dekodierung der Abfragezeichenfolge , wobei allen Shell-Metazeichen "\" vorangestellt wird. Beschreibung im Hauptteil des Dokuments: <!--#echo var="QUERY_STRING_UNESCAPED" --> Ergebnis: (keine)

DATE_LOCAL - das aktuelle Datum ist auch Uhrzeit (lokal) Beschreibung im Textkörper des Dokuments: <!--#echo var="DATE_LOCAL" --> Ergebnis der Verwendung: <! - # echo var = "DATE_LOCAL" ->

DATE_GMT - das aktuelle Datum ist auch Uhrzeit (GMT) Beschreibung im Hauptteil des Dokuments: <!--#echo var="DATE_GMT" --> Ergebnis der Verwendung: <! - # echo var = "DATE_GMT" ->

LAST_MODIFIED - Das Datum ist auch die Uhrzeit der endgültigen Dateiänderung. Beschreibung im Hauptteil des Dokuments: <!--#echo var="LAST_MODIFIED" --> Ergebnis der Verwendung: <! - # echo var = "LAST_MODIFIED" ->

3.4 Serverkonfiguration

Damit der Server wissen kann, in welchem ​​Raum sich die Daten befinden, muss er diesen Vorgang analysieren. Die vom Server analysierten Dokumente werden als vom Server analysierte Dokumente bezeichnet.

Zunächst muss der Server darauf aufmerksam gemacht werden, welche Dokumente analysiert werden sollen. Dazu ist die Konfigurationsdatei (für ältere Versionen von Apache und NCSA-Webservern die Datei srm.conf , für neue Versionen von Apache beispielsweise 1.3.4 - httpd.conf ) müssen Sie die folgenden Parameter hinzufügen: Apache-Server:

AddType text / html .shtml &lt;br&gt; AddHandler vom Server analysierte .shtml

NCSA-Server:

AddType text / x-server-parsed-html .shtml Die angegebenen Parameter drücken das alle Dateien mit der Erweiterung aus .shtml Wenn der Server diese Aktion durchführt, muss er vom Server analysiert werden.

Warum eine separate Erweiterung für vom Server geparste Dokumente angeben? - fragt ein neugieriger Leser. Wir antworten Natürlich hindert Sie keine Person daran, eine Zeile zur Konfigurationsdatei hinzuzufügen.

AddType text / x-server-parsed-html .html Dies führt jedoch dazu, dass der Server alle Dokumente mit der Erweiterung überprüft .html, Auch wenn sie keinen SSI-Anruf haben, erhöht sich die Systemlast, die Serverleistung nimmt jedoch ab.

Wir sollten nicht vergessen, dass es nicht erfolgreich ist, den SSI-Aufruf in das CGI-Programm aufzunehmen, da ihre Schlussfolgerung durch den Server nicht analysiert wird.

Weitere Informationen zum Konfigurieren des Servers für SSI finden Sie in der Dokumentation zum Server.

Anwendungen

Anhang 1. Server-Umgebungsvariablen

Nachfolgend finden Sie eine Liste der Hauptserverumgebungsvariablen mit einer kurzen Beschreibung des Verwendungszwecks: In diesem Fall den Apache 1.2.5-Server mit dem Modul PHP / FI-2.0.1. Bei anderen Webservern (MS IIS, Netscape, NCSA httpd usw.) können sich die Variablen unterscheiden.

REMOTE_HOST ist der Hostname des mit dem Server verbundenen Hosts. Bei der Arbeit über einen Proxy - der Name des Proxy.
Beispiel: REMOTE_HOST = lom.pvrr.ru

REMOTE_ADDR - IP-Adresse des mit dem Server verbundenen Hosts. Bei der Arbeit über einen Proxy die IP-Adresse des Proxy.
Beispiel: REMOTE_ADDR = 194.87.186.11

REMOTE_PORT ist die Portnummer des Clients.
Beispiel: REMOTE_PORT = 3381

HTTP_USER_AGENT - Name / Versionsnummer / usw. Kunde (Browser). Die Verwendung dieser Variablen erschreckt manchmal einzelne Internetbenutzer. :) Aber schon beim Unterricht ist eine sehr nützliche Sache. Zum Beispiel für die automatische Erkennung von russischen Kodierungen.
Beispiel: HTTP_USER_AGENT = Mozilla / 4.07 [de] (X11; I; FreeBSD 2.2.6-RELEASE i386)

HTTP_ACCEPT - Datentypen, zusätzlich zu Text / HTML, vom Client (Browser) wahrgenommen
Beispiel: HTTP_ACCEPT = image / gif, image / x-xbitmap, image / jpeg, image / pjpeg, image / png, * / *

HTTP_ACCEPT_CHARSET - welche Zeichensätze werden vom Kunden (Browser) verstanden.
Beispiel: HTTP_ACCEPT_CHARSET = iso-8859-1, *, utf-8

HTTP_ACCEPT_LANGUAGE - welche Sprachen der Kunde wahrnimmt (Browser).
Beispiel: HTTP_ACCEPT_LANGUAGE = nl, nl-BE, ru

* * *

SERVER_NAME ist der Servername, der dem IN A- Eintrag in DNS entspricht, oder der Wert der Variablen ServerName (oder ähnliches) in der Serverkonfiguration.
Beispiel: SERVER_NAME = arche.pvrr.ru

HTTP_HOST ist der Name des Servers oder des virtuellen Hosts, auf den der Client zugreift. Der HTTP_HOST-Wert kann dem SERVER_NAME-Wert entsprechen.
Beispiel: HTTP_HOST = www.pvrr.ru

SERVER_SOFTWARE - welche Software wird als Server verwendet.
Beispiel: SERVER_SOFTWARE = ​​Apache / 1.2.5 PHP / FI-2.0.1

DOCUMENT_ROOT - Route zum "root" des Webservers vom "root" des Dateisystems des Computers, auf dem er arbeitet.
Beispiel: DOCUMENT_ROOT = / usr / local / www / html

HTTP_CONNECTION - Verbindungstyp.
Beispiel: HTTP_CONNECTION = Keep-Alive

SERVER_PROTOCOL ist ein Protokoll, das zum Datenaustausch mit einem bestimmten Client verwendet wird.
Beispiel: SERVER_PROTOCOL = HTTP / 1.0

REQUEST_URI - Der Name der angeforderten Ressource / des Dokuments, einschließlich des Pfads vom Stamm des Webservers. Beim Verweisen auf das Server-Root oder -Verzeichnis erhält diese Variable den Namen des Verzeichnisses oder "/" im Falle des Server-Roots.
Beispiel: REQUEST_URI = / cgi-bin / tralala / script.cgi

DOCUMENT_URI - Der Name der angeforderten Ressource / des Dokuments, einschließlich des Pfads vom Stamm des Webservers. Normalerweise beim Aufruf von SSI initialisiert. В отличие от REQUEST_URI эта переменная, в случае обращения к каталогу либо корню сервера получает значение содержащее также имя файла, являющегося Directory Index'ом этого каталога.
Пример: DOCUMENT_URI=/tralala/index.shtml

HTTP_REFERER - наполненный URL документа, по ссылке с которого вы попали на этот сервер. Данную переменную разрешено использовать при написании счетчиков.
Пример: HTTP_REFERER=http://lom.pvrr.ru/java/cgi/cgi_1.html

GATEWAY_INTERFACE - название/версия интерфейса, чрез какой сервер работает со скриптом.
Пример: GATEWAY_INTERFACE=CGI/1.1

SCRIPT_FILENAME - имя скрипта, содержащее наполненный маршрут от "корня" файловой системы.
Пример:SCRIPT_FILENAME=/usr/local/www/cgi-bin/tralala/script.cgi

SCRIPT_NAME - имя скрипта, содержащее маршрут от "корня" веб-сервера.
Пример: SCRIPT_NAME=/cgi-bin/tralala/script.cgi

REQUEST_METHOD - метод используемый заказчиком для передачи данных серверу. Бывают GET, HEAD, POST, PUT.
Пример: REQUEST_METHOD=GET

QUERY_STRING - этой переменной значение присваивается при передаче данных серверу методом GET
Пример: QUERY_STRING=button=on

CONTENT_LENGTH - этой переменной присваивается значение, равное количеству байт, переданных браузером серверу при использовании метода POST.
Пример: CONTENT_LENGTH=9

REMOTE_USER - имя пользователя. Передается только если аутентифицируется доступ к CGI скрипту.

PATH_INFO - дополнительная информация о маршруту, которую передал клиент. То кушать скрипт может приобретать некоторые параметры, содержащие информауцию о некотором "маршруте" к некоторым данным (например к файлу конфигурации, необходимому для отделки запроса отименно этого клиента). Этот маршрут "виртуальный" - т.е от "корня веб-сервера". Остальные данные разрешено передавать как обычно - методом GET или POST.
Пример: PATH_INFO=/some/path

PATH_TRANSLATED - то бла бла , что также PATH_INFO, только маршрут физический - "от корня файловой системы"

REMOTE_IDENT - Если HTTP сервер поддерживает идентификацию согласно RFC 931, то этой переменной присваивается имя пользователя получаемое от сервера.

SERVER_ADMIN - e-mail правителя веб-сервера.
Пример: SERVER_ADMIN=webmaster@www.pvrr.ru

SERVER_PORT - порт, какой "слушает" веб-сервер.
Пример: SERVER_PORT=80

* * *

HTTP_X_FORWARDED_FOR - в случае труда чрез прокси - IP адрес клиента, работаеющего чрез прокси.
Пример: HTTP_X_FORWARDED_FOR=194.87.186.11

HTTP_VIA - имя, номер порта, разновидность ПО прокси-сервера.
Пример: HTTP_VIA=1.0 proxy1.pvrr.ru:8080 (Squid/2.1.PATCH1)

HTTP_CACHE_CONTROL - что-то связанное с возрастом акта в кэше прокси сервера :) Лгать никак не буду - никак не знаю :)
Пример: HTTP_CACHE_CONTROL=max-age=259200