# Server Side Includes

Server Side Includes (SSI) of server parsed HTML (SHTML) is server-side scriptingtechniek die ondersteund wordt door sommige webservers. De techniek maakt het mogelijk om de server een aantal zaken automatisch te laten afhandelen die anders met de hand, of met behulp van een programmeertaal (zoals PHP of Perl), uitgevoerd zouden moeten worden. SSI wordt vooral gebruikt om de inhoud van de ene file in een andere op te nemen, op het moment dat die laatste opgevraagd wordt. Het is HTML-code die speciale regels bevat en die door de webserver omgezet worden naar normale HTML-code, voordat deze doorgezonden wordt naar de gebruiker. Dit kan gebruikt worden om bijvoorbeeld meerdere HTML-bestanden naar één HTML-bestand om te vormen. De commandosyntaxissen en -sets verschillen tussen de verscheidene serversystemen.
SSI is vooral geschikt voor eenvoudige taken. Voor complexe taken, zoals authenticatie, verdient het gebruik van een complete programmeertaal zoals PHP de voorkeur. Meestal wordt voor HTML-files die SSI-commando's bevatten de extensie .shtml of .shtm gebruikt, hoewel het ook mogelijk is de server zodanig te configureren dat een zelfgekozen extensie mogelijk is.
SSI-commando's worden opgenomen in HTML-commentaar (zodat deze niet zichtbaar zijn als SSI niet werkt), en hebben de volgende vorm:
Waarbij het "<!-- .. -->"-gedeelte normaal wordt gezien als een commentaar en wordt genegeerd, maar via een SHTML-geactiveerde server gebruikt wordt. Deze commando's worden vervolgens gelezen door de HTTP-server en gebruikt om de HTTP-code te vormen die bij het gebruikte commando hoort. Meestal wordt SHTML-code opgeslagen in een .shtml/.shtm-bestand op de server. Dit is echter geen verplichting: ook de .html-extensie kan gebruikt worden.

## Commando's en attributen

Enkele commando's ter voorbeeld:

### Het config-commando

Met het config-commando kan je extra controle uitvoeren over de fileparsing. Deze gaat met de volgende attributen samen:
* errmsg - Dit attribuut geeft een bericht weer aan de cliënt wanneer er een fout ontstaat bij het parsen van
de shtml file. Deze fout wordt tevens in een errorlogbestand opgeslagen.
* timefmt - Dit attribuut staat voor het formaat van de tijdsdata in het HTML-bestand dat door de flastmod wordt geleverd.
Het maakt gebruikt van hetzelfde formaat als de strftime library call in C.
* sizefmt - Staat voor het rapporteren van de grootte van het gezonden bestand. Volgende waarden kunnen gebruikt worden bij dit attribuut:
** bytes - Om de grootte van de file te beschrijven in een getal in het formaat 12.345.678.
** abbrev - Om de grootte van de file te beschrijven in een getal in het formaat van K(ilo)bytes of M(ega)bytes. Dit is de standaardoptie.

#### Voorbeeld

<!--#config errmsg="Dit is een testbericht!" -->

### Het include-commando

Via dit commando kan je de inhoud van een ander bestand bijvoegen. Deze gaat met de volgende attributen samen:
* virtual - Deze staat in voor het virtuele pad naar het bestand
* file - Deze staat in voor het relatieve pad naar het bestand (geen gebruik makend van / of absolute paden)

#### Voorbeeld

<!--#include file="testpagina.html"-->
Als een pagina waarin deze regel is opgenomen opgevraagd wordt, zal de server de bovenstaande regel vervangen door de inhoud van de file testpagina.html.

### Het echo-commando

Dit commando laat de data omvormen naar een speciale of omgevingsvariabele (het var-attribuut wordt telkens hierbij gevoegd).

#### Voorbeeld

<!--#echo var="REMOTE_ADDR" --> Met REMOTE_ADDR wordt het IP-adres van de bezoeker van de pagina bedoeld.

### Het fsize-commando

Dit commando geeft de grootte van een specifiek bestand weer. Dezelfde attributen als die van include worden hierbij gebruikt.

#### Voorbeeld

<!--#fsize file="testbestand.gif"-->

### Het exec-commando

Met dit commando kan je een CGI-programma/script of een shellopdracht opstarten. Dit gaat met de volgende attributen samen:
* cmd - om een shellopdracht op te starten
* cgi - om een CGI-script/programma op te starten

#### Voorbeeld

<!--#exec cgi="/cgi-bin/foo.cgi"-->

### Het flastmod-commando

Dit commando laat je de datum zien van de laatste wijziging van een bepaald bestand. Dezelfde attributen als het include-command worden hier gebruikt.

#### Voorbeeld

<!--#flastmod file="testpagina.html"-->