INHALT | ZURÜCK | VOR
   SSI (Server Side Include) mit Clarissa-HTTPd

   SSI ist ein der nettesten Sachen, die es gibt.
   Hierdurch ist es nämlich möglich sich einige Arbeit zu sparen,
   wenn man allein die Möglichkeit nimmt Templates benutzen zu können.
   Templates sind hierbei eigenständige Dateien, welche durch
   eine einzige Zeile in die eigentliche HTML-Seite eingefügt werden.
   Wenn man nun z.B. ein Menü hat, daß auf jeder Seite erscheinen
   soll jedoch gerne ohne Frames arbeitet würde man bei einem
   HTTP-Server welcher SSI unterstützt das Menü ein einziges mal
   als Template erstellen und es dann über einen entsprechenden
   SSI-Befehl an entsprechender Stelle in die anderen Seiten integrieren.
   OK so weit so gut, der eigentliche Vorteil von SSI kommt aber eigentlich
   nur zum Vorschein, wenn dieses Menü mal verändert werden muß.
   Dann muß man nämlich nicht jede einzelne Datei verändern, sondern
   brauch nur das Template Menü abzuändern und schon ist es auf allen
   Seiten verändert.

   Nun aber zur SSI-Unterstützung von Clarissa-HTTPd.
   Damit Clarissa-HTTPd eine Datei auf SSI-Befehle überprüft,
   muß diese Datei zunächst einmal die Endung .shtml oder .shtm
   haben.
   Ich habe dies so gelöst, damit nicht unnötigerweise jede
   normale HTML-Datei auf SSI-Befehle gescannt werden muß,
   was eine schnellere Übertragung für normale HTML-Dateien
   zur Folge hat.

   SSI-Befehle werden allgemein als Kommentare angegeben,
   was dafür sorgt, daß die Befehle auf einem Server, der kein
   SSI kann, nicht auf dem Bildschirm des Benutzers erscheinen.
   

   Clarissa-HTTPd kennt momentan genau 5 SSI-Befehle
   Ich habe hierbei versucht, die Befehle so nah wie möglich
   am allgemeinen SSI-Standard zu definieren, wie er in
   SelfHTML beschrieben wird.

   1. <!--#echo var="DATE_LOCAL"-->
      (Muß genau so eingegeben wie hier angegeben! Groß- & Kleinschreibung beachten!)
      Liefert das aktuelle Datum des Rechner's auf dem der Server läuft.

   2. <!--#echo var="TIME_LOCAL"-->
      (Muß genau so eingegeben wie hier angegeben! Groß- & Kleinschreibung beachten!)
      Liefert die aktuelle Uhrzeit des Rechner's auf dem der Server läuft.

   3. <!--#exec cgi="[pfad/script]"-->
      Ruft ein CGI-Script mit relativer Pfadangabe innerhalb des Verzeichnisses
      cgi-shtml auf.
      Das Verzeichniss cgi-shtml liegt hierbei in dem unter HTMLVerz eingetragen
      Verzeichnis.
      Es ist wichtig, daß der Befehl mit <!--#exec cgi=" anfängt
      und mit "-->  endet, da Clarissa-HTTPd diesen Befehl nicht
      erkennt bzw. falsche Parameter an das aufzurufende Script übergibt!
      Ein Leerzeichen zuviel oder zu wenig in den fettgedruckten Bereichen
      hat Fehler zur Folge. Bitte auch auf Klein- und Großschreibung achten!!

      Nehmen wir an, im HTML-Verzeichnis von Clarissa-HTTPd gibt
      es ein Verzeichnis cgi-shtml in welchem die Datei counter.rexx liegt,
      dann lautet der korrekte Aufruf:
      <!--#exec cgi="counter.rexx counterbezeichnung"-->
      (counterbezeichnung ist hierbei ein Argument, welches von dem
       script counter.rexx als argument benötigt wird)

      Würde das script dagegen in einem unterverzeichniss von cgi-shtml
      liegen müßte der Aufruf z.B. so aussehen.
      <!--#exec cgi="unterverzeichnis/counter.rexx counterbezeichnung"-->

      Infos zum Erstellen von Scripten für diesen SSI-Befehl finden
      sie im Kapitel  CGI-Unterstützung .

   4. <!--#include virtual="[templatedatei]"-->
      Hiermit wird eine Text-/HTML-Datei in die SHTML-Datei eingefügt.
      Für die Genauigkeit der Angaben <!--#include virtual=" und "-->
      gilt das selbe wie unter dem vorhergehenden Punkt beschrieben.
      Die Pfad- und Datei-Angabe ist hier jedoch relativ zum
      HTML-Verzeichniss von Clarissa-HTTPd.
      Eine Template namens test.txt daß z.B. im Unterverzeichnis beispiel im
      HTML-Verzeichnis von ClarissaHTTPd zu finden ist würde mit
      <!--#include virtual="beispiel/test.txt"-->
      eingebunden werden.
      Selbstverständlich können auch templates aufgerufen werden,
      die in gemappten Verzeichnissen liegen.
      Für eine mappingURL /~test und eine dort vorhandene
      Datei test.txt würde der Aufruf dann wie folgt lauten.
      <!--#include virtual="~test/test.txt"-->
      Noch ein Hinweis zum Verwenden von Templates:
      Links, Pfade zu Bilder, etc. innerhalb von Templates sollten immer
      relativ zum Hauptverzeichnis des Servers angegeben werden, da
      sie sonst relativ zum Verzeichniss gesucht werden wo die shtml-Datei
      liegt, welche das Template eingebunden hat.
      Möchte man also ein Bild einbinden, welches im Verzeichniss pics
      im Hauptverzeichniss zu finden ist, kann man es aus jedem Verzeichnis
      des Servers heraus aufrufen indem man ein /pics/ vor den Dateinamen
      hängt. (Bsp. <img src="/pics/test.gif">)


   5. <!--#fsize file="[datei]"-->
      Liefert die Größe der angegeben Datei.
      Abhängig von der Größe der Datei erfolgt die Angabe in
      MB, KB oder Byte.
      Für die Genauigkeit der Angaben <!--#fsize file=" und "-->
      gilt das selbe wie bei <!--#exec cgi=.... beschrieben.
      Für die Angabe des Pfades gelten hier die selben Regeln wie bei
      <!--#include virtual=.... (also relativ zum Hauptverzeichniss des
      Servers)
      Beispiel: <!--#fsize file="beispiel/contact-template.tmpl"-->


   Tips zur Fehlersuche wenn ein SSI-Befehl keine Ausgabe erzeugt: 

   1. Man läßt sich die entsprechende Seite über den Browser anzeigen
      indem man sie über z.B. die URL http://localhost/datei.shtml aufruft.

   2. Nun läßt man sich dort den Quelltext der Datei anzeigen.
      - Ist dort der entsprechende SSI-Befehl zu entdecken so kann
        das 3 Gründe haben.
        1. Die Seite wurde nicht über den Server aufgerufen, sondern
           als lokale Datei geladen. ;-)
        2. Man hat einen Schreibfehler im SSI-Befehl (z.B. Leerzeichen zu
           viel oder zu wenig)
        3. Clarissa-HTTPd kennt diesen SSI-Befehl nicht.

      - Erscheint der SSI-Befehl dort nicht, und es erfolgt trotzdem
        keine Ausgabe, ist wahrscheinlich versucht worden ein CGI-Script
        oder Template aufzurufen welches nicht auf dem Server existiert.
        Am besten noch mal etwas höher nachschauen, wie die Bedingungen
        für die Pfadangaben bei diesen Dateien sind.
        Das Programm SnoopDos sorgt manchmal auch für die eine oder
        andere Erleuchtung. ;-)