mod_include.c
, et est compilé
par défaut. Il permet la composition dynamique de documents HTML
par le serveur. Plusieurs directives ont été rajoutées à celles définies dans la version NCSA originale à partir de la version 1.2 d'Apache - Ces directives sont identifiables ci-dessous par la mention
"A partir de la version 1.2 d'Apache". Une de ces directives particulièrement significatives est celle gérant le contrôle conditionnel d'inclusion décrite à la fin de cette page.
Includes
est définie, tout document associé au gestionnaire "server-parsed" sera composé par ce module. Si des documents contenant des directives SSI sont associés à une extension .shtml, les directives suivantes contrôleront comment Apache les compose et assignera au document résultant un type MIME text/html
:
AddType text/html .shtml
AddHandler server-parsed .shtml
La directive qui suit doit apparaître dans les descriptions de répertoires contenant des fichiers shtml (par exemple dans une section <Directory>
,
ou encore dans un fichier .htaccess si l'option de configuration AllowOverride
Options
est définie) :
Options +Includes
A l'inverse, la directive XBitHack
pourra être utilisée pour composer des documents (text/html
) normaux,
suivant les droits des fichiers.
Pour des raisons de compatibilité descendante, les documents associés aux types MIME
text/x-server-parsed-html
ou
text/x-server-parsed-html3
seront aussi pris en compte
(le document résultant étant encore associé au type MIME text/html
).
Le document est traité comme un document HTML, mais qui dispose en plus de commandes spéciales exprimées sous la forme de commentaires SGML. Les commandes répondent à la syntaxe :
<!--#
élément attribut=valeur attribut=valeur ...-->
La valeur sera souvent mise entre guillemets ; de nombreuses commandes ne permettront qu'un couple unique attribut/valeur. Notez que la marque de fin de commentaire (-->) doit être précédé d'un espace afin de s'assurer qu'il ne pourra être pris comme faisant partie d'un identifiant SSI.
Les éléments autorisés sont :
bytes
indiquant une expression de la taille en octets, ou
abbrev
pour une expression en Ko ou Mo selon le cas.
strftime(3)
pour l'impression de dates.
(none)
.
Toute impression de date se fera selon la configuration actuelle de timefmt
.
Attributs:
exec
exécute une commande shell ou un script CGI donné. L'option de configuration IncludesNOEXEC désactive cette commande totalement. Les attributs valides sont :
Le serveur donnera au script CGI les chaînes PATH_INFO ainsi que la chaîne originale de la requête (QUERY_STRING) du client ; Celles-ci ne pouvant être spécifiées dans le chemin de l'URL. Les variables d'inclusion seront fournies au script en plus de l'environnement CGI standard.
Si le script renvoie une adresse : une en-tête http plutôt qu'une sortie HTML, alors cette adresse sera traduite sous forme d'un hyperlien HTML.
L'élément include virtual
devra être utilisé de préférence à exec cgi
.
/bin/sh
.
Les variables d'inclusion sont accessibles à la commande lancée.
sizefmt
. Attributs :
timefmt
. Les attributs sont les mêmes que ceux de la commande fsize
.
Les attributs indiquent où se situent les documents à inclure ; l'inclusion est effectuée (selon les droits d'accès) pour chaque attribut donné dans la commande include
. Les attributs autorisés sont :
../
, et ne peut non plus être exprimé comme un chemin absolu. Il sera toujours préférable d'utiliser l'attribut virtual
plutôt que celui-ci.
<!--#printenv -->
<!--#set var="category" value="help" -->
En plus des variables de l'environnement CGI standard, ces variables sont accessibles à la commande echo
, aux instructions if
et elif
, et à tout programme appelé dans le document.
La substitution de variable est opérée dans les chaînes entre guillemets, dans la plupart des cas dans le cadre d'arguments de directives SSI. Ceci inclue les directives config, exec, flastmod, fsize, include, et set, ainsi que les arguments d'opérateurs conditionnels. Vous pouvez néanmoins insérer un dollar littéral dans une chaîne en le faisant précéder du caractère d'échappement "\" :
<!--#if expr="$a = \$test" -->
Si une référence à une variable doit être substituée à l'intérieur d'une chaîne de caractères et qu'une ambiguïté peut apparaître avec un autre identificateur plus long, cette dernière peut être levée en encapsulant l'identificateur de variable dans des accolades, comme pour une substitution shell :
<!--#set var="Zed" value="${REMOTE_HOST}_${REQUEST_METHOD}" -->
Le résultat de cet exemple est que la variable Zed devient "X_Y" si REMOTE_HOST vaut "X" et REQUEST_METHOD vaut "Y".
Exemple : l'exemple ci-dessous affichera "dans foo" si le DOCUMENT_URI vaut /foo/file.html, "dans bar" si il vaut /bar/file.html et sinon, "dans aucun" :
<!--#if expr="\"$DOCUMENT_URI\" = \"/foo/file.html\"" --> dans foo
<!--#elif expr="\"$DOCUMENT_URI\" = \"/bar/file.html\"" --> dans bar
<!--#else --> dans aucun
<!--#endif -->
<!--#if expr="condition_test" -->
<!--#elif expr="condition_test" -->
<!--#else -->
<!--#endif -->
L'élément if
fonctionne comme l'instruction "if" des langages de programmation courants. La condition test est évaluée, et si le résultat est vrai, le texte situé entre cet élément et le prochain élément elif
, else
.
ou endif
est écrit dans le flux de sortie.
Les éléments elif
ou else
seront utilisés pour insérer le texte dans le flux si la condition associée au if
est fausse. Ces éléments sont optionnels dans une syntaxe conditionnelle.
L'élément endif
termine la syntaxe conditionnelle initiée par l'élément if
et est obligatoire.
condition_test peut être l'une des expressions suivantes :
grep()
sous UNIX.
"=" et "!=" sont considérés avant "&&" et "||". "!" est l'opérateur de plus haute précédence. Ainsi, les expressions suivantes sont équivalentes :
<!--#if expr="$a = test1 && $b = test2" -->
<!--#if expr="($a = test1) && ($b = test2)" -->
Tout ce qui n'est pas reconnu comme un nom de variable ou un opérateur licite est considéré comme une chaîne de texte. Les chaînes de caractères peuvent aussi être exprimées entre apostrophes : 'string'. Les chaînes non cotées ne peuvent contenir de séparateurs (espaces ou tabulation) dans la mesure où ceux-ci sont utilisés pour séparer les "tokens". Si plusieurs chaînes se suivent dans un ligne, elles seront concaténées avec insertion d'un espace. Ainsi,
chaîne1 chaîne2 devient chaîne1 chaîne2 'chaîne1 chaîne2' devient chaîne1 chaîne2
XBitHack off
La directive XBitHack contrôle la composition dynamique de documents HTML ordinaires. Cette directive n'affecte que les fichiers associés à un type MIME text/html
.
Statut peut prendre les valeurs suivantes :
on
mais teste en plus le statut d'exécution de groupe (g+x). S'il est marqué, alors la date de dernière modification renvoyée est la date effective de dernière modification du fichier. Sinon, aucune date de dernière modification n'est envoyée au client. Marquer ce bit permet aux clients et aux proxies d'enregistrer le résultat de la requête dans leur cache.
Note : cette fonctionnalité devra être désactivée, par exemple, lorsque vous incluez un appel à un CGI qui produit des sorties différentes à chaque appel (ou dont la sortie dépend de la requête).
Adaptation française © Valery Fremaux / EISTI 1998