Support




HTX
Server Side Hypertext Extension Version 1.02

HTX ist eine serverseitige Erweiterung des HTML-Sprachumfangs, und führt den Gedanken der Server Side Includes (SSI) konsequent weiter. Serverseitig bedeutet, daß HTX-Befehle browserunabhängig bereits auf dem Server ausgeführt werden, bevor das angeforderte Dokument zum Browser übertragen wird. HTX versteht sich nicht als Ersatz für vollwertige CGI-Sprachen wie Perl. HTX soll hingegen einfache Lösungen für häufige Probleme bieten, die sonst nur mit CGI-Programmen gelöst werden könnten. Das Einbinden von Text-Countern, die Überprüfung von Formularen, das Importieren von Dokumenten, einfache Datenbankfunktionen oder das Versenden von E-Mails sind hier nur einige Anwendungen.

HTX-Tags können Sie einfach zusätzlich in normalen HTML-Dokumenten verwenden. Damit der Server weiß, daß es sich um Dokumente handelt, die HTX-Tags enthalten, verwenden Sie für diese Dokumente die Extension .htx. Also z.B. hauptseite.htx oder index.htx.

Wenn Sie ein HTX-Dokument mit einem Fragestring aufrufen finden Sie diesen in der Variablen
<VAR QUERY_STRING>. Zusätzlich können Sie die einzelnen Werte auch mit dem VAR-Befehl abrufen.

hauptseite.htx?sprache=Deutsch
liefert in <VAR QUERY_STRING> den Wert sprache=Deutsch
und über <VAR sprache> den Wert Deutsch

Auch wenn Sie ein HTX-Dokument über ein Formular ( <FORM> ) aufrufen, finden Sie den übermittelten Inhalt der Felder jeweils mit <VAR feldname>. Bei Formularen werden die Methoden GET und POST unterstützt.

Übersicht

CALC
COUNTER
ENDIF
ELSE
EXIT
DBDELETE
DBEND
DBREAD
DBWRITE
GET FILE
GET HTTP
IF
LEN
LET
SENDMAIL
STRSPLIT
STRRMV
VAR
WEND
WHILE


Reservierte Variablen



Syntax der HTX-Befehle

HTX-Befehle stehen immer in einer eigenen Zeile und werden in der für HTML üblichen Form <Befehl> angegeben.
Die HTX-Variablen <VAR name>, <COUNTER name> und <LEN string> können frei mit HTML-Code oder HTX-Befehlen, auch in der selben Zeile, gemischt werden.

Übersicht der HTX-Befehle

<CALC Variable = Formel>

    Der Befehl CALC gibt der Variablen den Wert der Berechnung der Formel.
    Die Formel kann HTX-Variablen und Zahlen und die Grundrechenarten (+,-,*,/) enthalten.

    Das Beispiel gibt mit dem Befehl <VAR resultat> den Wert der Berechnung aus:

      <CALC resultat=5*5> <CALC resultat=resultat/2> <VAR resultat>

<COUNTER countername>

    Der Befehl COUNTER zeigt den Wert des Counters countername an, und erhöht diesen um 1.
    Den Namen (immer in Kleinbuchstaben) können Sie frei wählen, und so beliebig viele Counter installieren. Der aktuelle Wert des jeweiligen Couters wird in Ihrem Datenverzeichnis /data in einer ASCII-Datei mit dem Namen countername.count gespeichert.

<DBDELETE "datei" "feldinhalt_1|feldinhalt_2|...|feldinhalt_n">

    Der Befehl DBDELET löscht aus der Datenbank datei den Datensatz feldinhalt_1|feldinhalt_2|...|feldinhalt_n.

    Folgendes Beispiel löscht den Kunden "Martin Meier" aus der Datenbank:

         <DBDELETE "kunden" "Herr|Martin|Meier">
    
<DBREAD "datei" "feldname_1|feldname_2|...|feldname_n">
 HTML- und HTX-Tags
<DBEND>

    Der Befehl DBREAD öffnet die Datenbank datei, und führt für alle Datensätze jeweils den durch das DBREAD / DBEND Paar eingeschlossenen Code aus HTML- und HTX-Tags aus.
    Die Feldeinträge des jeweiligen Datensatzes befinden sich in den Variablen feldname_1 bis feldname_n.
    Die Definition der Feldnamen wird in der gleichen Form angegeben wie die Datensätze selbst, also jeweils getrennt durch den Feldtrenner. Dieser Feldtrenner ist ein vordefiniertes Zeichen, das die einzelnen Felder voneinander trennt. Voreingestellt ist hier das Zeichen | (auf der PC-Tastatur über Alt-Gr-< erreichbar).

    Der DBREAD-Befehl darf nicht geschachtelt werden.

<DBWRITE "datei" "feldinhalt_1|feldinhalt_2|...|feldinhalt_n">

    Der Befehl DBWRITE erzeugt in der Datenbank datei den Datensatz feldinhalt_1|feldinhalt_2|...|feldinhalt_n. Wenn die Datenbank datei noch nicht existiert, wird diese in Ihrem /data-Verzeichnis erzeugt.

    Folgendes Beispiel erzeugt eine Datenbank mit vier einträgen, und gibt diese dann aus:

         <DBWRITE "kunden" "Herr|Martin|Meier">
         <DBWRITE "kunden" "Frau|Sonja|Schmidt">
         <DBWRITE "kunden" "Frau|Angela|Berger">
         <DBWRITE "kunden" "Herr|Jochen|Peters">
    
         <DBREAD "kunden" "anrede|vorname|name">
          Datensatz Nummer <VAR DB_RECORDNUMBER>:
          <VAR anrede> <VAR vorname> <VAR name><BR>
         <DBEND>
    
    Zusätzlich wird hier die Sondervariable DB_RECORDNUMBER verwendet, die die laufende Nummer des aktuellen Datensatzes enthält.
    Das nachfolgende Beispiel öffnet die eben erzeugte Datenbank "kunden", und gibt alle weiblichen Kunden aus:
         <DBREAD "kunden" "anrede|vorname|name">
          <IF "<VAR anrede>" EQ "Frau">
           Datensatz Nummer <VAR DB_RECORDNUMBER>:
           <VAR anrede> <VAR vorname> <VAR name><BR>
          <ENDIF>
         <DBEND>
    
<EXIT>

    Mit dem EXIT-Befehl können Sie die Abarbeitung eines HTX-Domuments an beliebiger Stelle beenden.

<GET FILE "Datei">

    Mit dem Befehl GET FILE können Sie eine Datei in das aktuelle HTX-Dokument einbinden. Mit diesem Befehl haben Sie Zugriff auf alle Dateien in Ihrem /htdocs-Verzeichnis. Die importierte Datei befindet sich dann in der Variablen <VAR FILE>.

    Folgendes Beispiel importiert Ihre Index-Datei:

         <GET FILE "index.htm">
         <VAR FILE>
    
    Eine häufige Anwendung ist das Verwenden von Header- und Footer-Dateien zur Vereinheitlichung von Webseiten.

<GET HTTP "http://adresse/dokument...">

    Mit dem Befehl GET HTTP können Sie ein Dokument von einem Server in das aktuelle HTX-Dokument einbinden. Eine häufige Anwendung ist das Aufrufen von CGI-Scripten (auch vom eigenen Server). Das importierte Dokument befindet sich dann in der Variablen <VAR HTTP>. Der Server wird mit der Methode GET gerufen.

    Folgendes Beispiel importiert das Ergebnis einer DE-NIC-Whois-Anfrage:

         <LET domain = "ibm.de">
         <GET HTTP "http://www.nic.de/cgi-bin/domainreg?domain=<VAR domain>">
         <VAR HTTP>
    
    Sie können das empfangene Dokument auch mit dem IF-Befehl überprüfen, und eine inhaltsabhängige Ausgabe erzeugen, ohne das Dokument selbst anzuzeigen. Dieses Beispiel überprüft das Ergebnis der DE-NIC-Whois-Anfrage:
         <IF "ist noch frei" CIN "<VAR HTTP>">
          Die Domain ist noch frei!<BR>
         <ELSE>
          Die Domain ist leider schon vergeben!<BR>
         <ENDIF>
    

<IF "Parameter1" Operator "Parameter2">
  HTML-Code
<ELSE>
  HTML-Code
<ENDIF>

    Der IF-Befehl überprüft Parameter1 und Parameter2 mit dem Operator

    Folgende Operatoren stehen zur Verfügung:

         EQ     gleich
         NE     ungleich
         GT     größer als
         GE     größer gleich
         LT     kleiner als
         LE     kleiner gleich
         IN     Parameter2 enthält den String Parameter1
         NOTIN  Parameter2 enthält den String Parameter1 nicht
         CIN    Parameter2 enthält den String Parameter1
                Groß- und Kleinschreibung wird ignoriert.
         NOTCIN Parameter2 enthält den String Parameter1 nicht
                Groß- und Kleinschreibung wird ignoriert.
    
    Die Parameter müssen in Anführungszeichen stehen.
    Der ELSE-Tag ist optional.

<LEN Variable>

    Der Befehl LEN gibt die Länge des Strings Variable aus.

<LET Variable = "Parameter">

    Der Befehl LET gibt der Variable Variable den Wert "Parameter".
    Parameter muß in Anführungszeichen stehen. Bei Variablen wird zw. Groß- und Kleinschreibung unterschieden.

<SENDMAIL>
To: Email-Adresse des Empfängers
From: Email-Adresse des Absenders
Subject: Betreffszeile

Die eigentliche Nachricht
</SENDMAIL>

    Der SENDMAIL-Befehl sendet eine Nachricht an die Email-Adresse des Empfängers. Als Absender wird die Email-Adresse des Absenders angegeben, als Betreff die unter Subject angegebene Betreffszeile.
    Das Mail-Protokoll schreibt vor, daß der Mail-Header (die Zeilen To:, From:, Subject: etc.) von der eigentlichen Nachricht mit einer Leerzeile getrennt sein muß.

<STRSPLIT string "trenner" teil1 teil2>

    Der Befehl STRSPLIT trennt den String string beim ersten Vorkommen der Zeichenfolge trenner in den vorderen Teil teil1 und den hinteren Teil teil2. Der Inhalt der Variablen string wird dabei nicht verändert.

<STRRMV String "Zeichenfolge">

    Der Befehl STRRMV entfernt die Zeichenfolge aus der Variablen String.
    Dieses Beispiel entfernt das "www." aus einem Domainnamen:

         <LET domain = "www.ihrname.com">
         <STRRMV domain "www.">
    
<VAR Variable>

    Der VAR-Befehl gibt den in der Variablen Variable gespeicherten Wert oder String aus.

<WHILE Variable>
 ...
 ...
<WEND>

    Mit der WHILE / WEND Kombination wird der durch diese Befehle eingeschlossene Bereich solange ausgeführt, wie Variable wahr, also ungleich Null, ist.

    Folgendes Beispiel gibt die Zahlen 1-10 aus:

         <LET A= "10">
         <WHILE A>
          <CALC B=11-A>
          <CALC A=A-1>
          <VAR B><BR>
         <WEND>
    
    Der WHILE-Befehl darf nicht geschachtelt werden.

Reservierte Variablen

    Import:
    FILE - Enthält die zuletzt importierte Datei
    HTTP - Enthält das zuletzt importierte HTTP-Dokument

    Zeit / Datum:
    TM_SEC - Sekunden der aktuellen Zeit
    TM_MIN - Minuten der aktuellen Zeit
    TM_HOUR - Stunden der aktuellen Zeit
    TM_DAY - Tag des aktuellen Datums
    TM_HOUR - Stunden der aktuellen Zeit
    TM_MON - Monat des aktuellen Datums
    TM_HOUR - Stunden der aktuellen Zeit
    TM_YEAR - Jahr des aktuellen Datums
    TM_WDAY - Wochentag aktuellen Datums (1=Montag,7=Sonntag)

    Umgebungsvariablen:
    (Z.T. sind, abhängig vom Status des Dokuments, zusätzliche Umgebungsvariablen verfügbar)
    SERVER_SOFTWARE
      Der Name und die Version des Informationsservers, der die Anforderung beantwortet (und der das Gateway ausführt). Format: name/version
    SERVER_NAME
      Der Hostname des Servers, der DNS Alias oder die IP-Adresse, wie sie in selbstreferenzierenden URL's vorkämen.
    GATEWAY_INTERFACE
      Die Ausgabe der CGI Spezifikation, zu der der Server konform ist. Format: CGI/revision
    SERVER_PROTOCOL
      Der Name und der Stand des Informationsprotokolls, in der die Anforderung gestellt wurde. Format: protocol/revision
    SERVER_PORT
      Die Portnummer an die die Anforderung gesendet wurde.
    REQUEST_METHOD
      Die Methode, mit der die Anforderung gestellt wurde. Für HTTP sind dies "GET", "HEAD", "POST", usw.
    HTTP_ACCEPT
      Die MIME Typen, die der Klient akzeptiert, so wie sie im HTTP Header enthalten waren. Andere Protokolle könnten diese Informationen auch aus anderer Quelle erhalten. Jeder Bestandteil der Liste sollte laut HTTP Spezifikation durch Komma getrennt sein.
      Format: type/subtype, type/subtype
    PATH_INFO
      Eine zusätzliche vom Klienten gelieferte Pfadinformation, d.h. Skripte sind über virtuelle Pfadnamen, die von Zusatzinformationen am Ende des Pfades gefolgt werden können, aufrufbar. Die Zusatzinformation wird als PATH_INFO übergeben. Diese Information sollte zuvor vom Server dekodiert werden.
    PATH_TRANSLATED
      Der Server bietet noch eine übersetzte Version von PATH_INFO, die auf den Pfad eine Abbildung von virtuellen auf physischen Namen vornehmen kann.
    SCRIPT_NAME
      Ein virtueller Pfad des auszuführenden Skripts, der für selbst refenzierende URL's benutzt werden kann.
    QUERY_STRING
      Die Information, die einem ? in einem URL, der das Skript referenziert, folgt. Man nennt sie die Query-Information. Sie sollte in keiner Weise dekodiert werden. Die Variable sollte immer gesetzt sein, falls eine Query-Information vorhanden ist, unabhängig von der Kommandozeilendekodierung.
    REMOTE_HOST
      Der Hostname des Rechners, der die Anforderung gestellt hat. Falls der Server diese Information nicht hat, so sollte REMOTE_ADDR gesetzt sein und die Variable nicht.
    REMOTE_ADDR
      Die IP-Adresse des Rechners, der die Anforderung gestellt hat.
    AUTH_TYPE
      Falls der Server Nutzer-Authentifizierung unterstützt und das Skript einem Schutz unterliegt, so wird die protokollspezifische Authentifizierungsmethode zur Validierung des Nutzers verwendet.
    REMOTE_USER
      Falls der Server Nutzer-Authentifizierung unterstützt und das Skript einem Schutz unterliegt, so wird hiermit der Nutzername übergeben, der authentifiziert wurde.
    REMOTE_IDENT
      Falls der Server RFC 931 Identifikation unterstützt, dann wird diese Variable auf den Namen des Nutzers, wie er vom Server übermittelt wurde, gesetzt. Die Benutzung dieser Variablen sollte auf die Protokollierung begrenzt sein.
    CONTENT_TYPE
      Für Anforderungen, an die Informationen gebunden sind, so wie bei HTTP POST und PUT, ist hier der Typ der Daten enthalten.
    CONTENT_LENGTH
      Dies ist die Länge der eben genannten Daten, die vom Klienten übergeben werden.

    Sonstige:
    HTX_VERSION - Die HTX-Versionsnummer
    DB_SEPERATOR
      Diese Variable enthält den Feldtrenner für die Datenbankfunktionen. Voreingestellt ist hier das Zeichen |
      Wenn Sie einen anderen Feldtrennen verwenden möchten, kann dieser mit dieser Variablen definiert werden.
    DB_RECORDNUMBER
      Diese Variable enthält die laufende Nummer des aktuellen Datensatzes.

    Folgendes Beispiel gibt das aktuelle Datum aus:

         Es ist
         <IF "<VAR TM_WDAY>" EQ "0">Sonntag,<ENDIF>
         <IF "<VAR TM_WDAY>" EQ "1">Montag,<ENDIF>
         <IF "<VAR TM_WDAY>" EQ "2">Dienstag,<ENDIF>
         <IF "<VAR TM_WDAY>" EQ "3">Mittwoch,<ENDIF>
         <IF "<VAR TM_WDAY>" EQ "4">Donnerstag,<ENDIF>
         <IF "<VAR TM_WDAY>" EQ "5">Freitag,<ENDIF>
         <IF "<VAR TM_WDAY>" EQ "6">Samstag,<ENDIF>
         der <VAR TM_DAY>.<VAR TM_MON>.19<VAR TM_YEAR>