From: Lucien Gentis Les SSI permettent d'ajouter du contenu dynamique à des documents
-HTML préexistants.
SSI (Server Side Includes) est constitué de directives placées dans - des pages HTML, et évaluées par le serveur au moment où les pages - sont servies. Elles vous permettent d'ajouter du contenu généré - dynamiquement à une page HTML préexistante, sans avoir à servir la - page entière via un programme CGI, ou toute autre technologie de - contenu dynamique.
- -Par exemple, vous pouvez insérer la directive suivante dans une - page HTML existante :
- -Les directives SSI sont des commentaires HTML avec une syntaxe spécifique
+ que le module
Ainsi, lorsque la page sera servie, la directive sera évaluée et - remplacée par sa valeur :
+Lorsque la page est servie, ce fragment est remplacé par sa valeur :
+Le choix entre l'utilisation des SSI et la génération entière de - la page par un programme quelconque, est en général dicté par la - proportion de contenu statique et de contenu devant être généré - chaque fois que la page est servie. SSI est idéal pour ajouter de - petites quantités d'information, comme l'heure courante dans - l'exemple précédent. Mais si la - plus grande partie de votre page est générée au moment où elle est - servie, vous devez vous tourner vers une autre solution.
+Les directives étant intégrées dans des commentaires HTML, les + navigateurs les ignoreront si les SSI ne sont pas activées (bien quâelles + demeurent visibles dans le code source de la page).
Pour permettre l'utilisation des SSI sur votre serveur, vous
- devez ajouter la directive suivante dans votre fichier
- httpd.conf, ou dans un fichier .htaccess
- :
Pour activer le traitement des SSI, ajoutez la directive suivante à votre
+ fichier httpd.conf ou à un fichier .htaccess :
Si cette option est définie, httpd va analyser les fichiers en y
+ recherchant des directives SSI. Comme la plupart des configurations
+ contiennent plusieurs directives
Cette directive indique à Apache que vous désirez permettre la
- recherche de directives SSI lors de l'interprétation des fichiers.
- Notez cependant que la plupart des configurations contiennent de
- nombreuses directives Options au répertoire
- spécifique pour lequel vous voulez activer les SSI, afin d'être sûr
- qu'elles y seront bien activées.
Tout fichier ne fera cependant pas l'objet de recherche de
- directives SSI. Vous devez indiquer à Apache quels fichiers seront
- concernés. Vous pouvez y parvenir en indiquant une extension, comme
- .shtml, Ã l'aide des directives suivantes :
Vous devez aussi indiquer à httpd les fichiers quâil doit analyser. Pour + ce faire, il existe deux approches courantes.
+ +La première consiste à indiquer une extension de nom de fichier (en
+ général .shtml) pour les pages pour lesquelles les SSI sont
+ activées :
Un des désavantages de cette approche réside dans le fait que si
- vous voulez ajouter des directives SSI à une page préexistante, vous
- devrez changer le nom de cette page, et donc tout lien qui la
- contient, de façon à ce qu'elle possède l'extension
- .shtml, condition nécessaire pour que les directives
- SSI qu'elle contient soient traitées.
Cette approche a pour désavantage de nécessiter, pour ajouter des SSI Ã
+ une page existante, de renommer le fichier (et de mettre à jour tous les
+ liens vers ce dernier) pour utiliser lâextension .shtml.
Une autre méthode consiste à utiliser la directive
La directive
La directive chmod.
Un bref commentaire sur ce qu'il ne faut pas faire. Certaines
- personnes peuvent vous conseiller de tout simplement indiquer Ã
- Apache de rechercher des directives SSI dans tous les fichiers
- .html, ce qui vous évite d'avoir à gérer les noms de
- fichiers avec extension .shtml. Ils n'ont probablement
- pas entendu parler de la directive
Bien entendu, sous Windows, il n'y a pas de bit d'exécution à - positionner, ce qui limite un peu vos choix.
- -Dans sa configuration par défaut, Apache n'envoie pas la date de - dernière modification ou les en-têtes HTTP relatifs à la taille des - contenus dans les pages SSI, car ses valeurs sont difficiles à - calculer pour les contenus dynamiques. Ceci peut induire une - impression de diminution des performances côté client, en empêchant - la mise en cache de votre document. Il existe deux méthodes pour - résoudre ce problème :
+ +
+ Ãvitez de configurer httpd pour analyser tous les fichiers
+ .html pour y trouver des directives SSI. Cela force en effet le
+ serveur à parcourir tous les fichiers HTML quâil sert, même ceux qui nâont
+ pas de contenu SSI, ce qui ajoute une surcharge de travail inutile.
+
Sous Windows, il nây a pas de bit dâexécution ; lâapproche avec la
+ directive
Par défaut, httpd nâenvoie pas la date de dernière modification ou les + en-têtes content-length sur les pages SSI, car ces valeurs sont difficiles à + calculer pour un contenu dynamique. Cela peut empêcher la mise en cache et + induire un ressenti de performances plus lentes. Deux approches peuvent + aider :
XBitHack Full. Elle
- indique à Apache de déterminer la date de dernière modification en
- ne regardant que la date du fichier à l'origine de la requête,
- tout en ignorant la date de modification de tout fichier inclus.XBitHack Full qui indique à httpd
+ quâil doit déterminer la date de dernière modification à partir du fichier
+ initialement demandé, tout en ignorant les dates de dernière modification
+ des fichiers inclus.Les directives SSI adoptent la syntaxe suivante :
+Les directives SSI utilisent la syntaxe suivante :
Le format d'une directive SSI étant similaire à celui d'un - commentaire HTML, si vous n'avez pas activé correctement SSI, le - navigateur l'ignorera, mais elle sera encore visible dans le source - HTML. Si SSI est correctement configuré, la directive sera remplacée - par ses résultats.
- -"fonction" peut prendre de nombreuses formes, et nous décrirons - plus précisément la plupart d'entre eux dans la prochaine version de - ce document. Pour le moment, voici quelques exemples de ce que vous - pouvez faire avec SSI.
+Si les SSI sont correctement configurées, la directive sera remplacée par + sa sortie. Dans le cas contraire, elle demeurera en tant que commentaire + HTML â invisible à lâutilisateur final, mais présente dans le code source de + la page.
La fonction echo permet d'afficher la valeur d'une
- variable. Il existe un grand nombre de variables standards, y
- compris l'ensemble des variables d'environnement disponibles pour
- les programmes CGI. De plus, vous pouvez définir vos propres
- variables à l'aide de la fonction set.
La fonction echo a pour sortie la valeur dâune variable. Les
+ variables standard incluent le jeu complet de variables dâenvironnement
+ disponibles pour les programmes CGI, ainsi que les variables que vous pouvez
+ définir avec set.
Si vous n'aimez pas le format sous lequel la date s'affiche, vous
- pouvez utiliser la fonction config avec un attribut
- timefmt, pour le modifier.
Pour personnaliser le format de la date, utilisez la fonction
+ config avec lâattribut timefmt :
Le format peut là aussi être modifié à l'aide de l'attribut
@@ -236,12 +229,13 @@ AddOutputFilter INCLUDES .shtml
C'est le cas le plus courant d'utilisation des SSI - afficher les
- résultats d'un programme CGI, comme l'universellement adoré
- "compteur d'accès". Les SSI permettent dâinclure directement la sortie dâun programme CGI
+ dans la page : Vous trouverez dans ce qui suit quelques exemples spécifiques de
- ce que vous pouvez faire de vos documents HTML avec SSI. Vous trouverez dans les exemples pratiques suivants des cas dâutilisation
+ courants des SSI. Nous avons mentionné plus haut que vous pouviez utiliser SSI pour
- informer l'utilisateur de la date de dernière modification du
- document. Cependant, la méthode pour y parvenir n'a pas été vraiment
- abordée. Placé dans votre document HTML, le code suivant va insérer
- un repère de temps dans votre page. Bien entendu, SSI devra avoir
- été correctement activé, comme décrit plus haut. Une des utilisations courantes des SSI est lâaffichage dâun horodatage
+ « date de dernière modification » sur chaque page. Le code suivant utilise
+ la variable Bien entendu, vous devez remplacer Pour plus de détails sur le format Pour des détails à propos des chaînes de formatage de
+ En plus du format de date, vous pouvez utiliser l'élément
- En plus de En général, lorsque quelque chose se passe mal avec votre
- directive SSI, vous recevez le message : Lâattribut Pour modifier ce message, vous pouvez utiliser l'attribut
- Vous pouvez le remplacer par un contenu plus adapté à votre site : Il est cependant probable que les utilisateurs finaux ne voient
- jamais ce message, car vous aurez résolu tous les problèmes issus de
- vos directives SSI avant que votre site ne soit mis en production.
- (N'est-ce pas ?) Vous pouvez aussi modifier le format sous lequel les tailles de
- fichiers sont affichées à l'aide de l'attribut
- Dernière modification du fichier <!--#flastmod file="ssi.shtml" -->
-LAST_MODIFIED ; vous pouvez donc coller le même
+ extrait dans tout fichier sans modifier son nom :ssi.shtml par le
- nom du fichier auquel vous faites référence. Ceci ne conviendra pas
- si vous recherchez un morceau de code générique que vous pourrez
- insérer dans tout fichier ; dans ce cas, il est préférable
- d'utiliser la variable LAST_MODIFIED :
- This file last modified <!--#echo var="LAST_MODIFIED" -->
+
+Date de dernière modification de ce fichier <!--#echo var="LAST_MODIFIED" -->
+timefmt, tapez
- strftime dans votre moteur de recherche préferé. La
- syntaxe est identique.timefmt, voir la documentation de strftime dans le
+ manuel de référence de la bibliothèque C de votre système.config pour configurer deux autres choses.timefmt, la fonction config accepte
+ deux autres attributs.errmsg modifie le message dâerreur affiché
+ lorsquâune directive SSI échoue. Le message par défaut est :errmsg avec la fonction config :sizefmt.
- Vous pouvez spécifier bytes pour un affichage en
- octets, ou abbrev pour un affichage plus concis en Ko
- ou Mo, selon le cas.
Lâattribut sizefmt contrôle la manière dont les tailles de
+ fichier sont spécifiées : bytes pour un décompte en octets ou
+ abbrev pour une forme abrégée en Ko ou Mo.
Voici autre chose que vous pouvez faire avec la fonction
- exec. Vous pouvez vraiment faire exécuter une commande
- par SSI en utilisant le shell (/bin/sh, pour être plus
- précis - ou le shell DOS, si vous êtes sous Win32). Par exemple, ce
- qui suit vous permet d'afficher le contenu d'un répertoire.
La fonction exec permet dâexécuter une commande du shell et
+ dâinclure sa sortie dans la page. Sur les systèmes de style Unix, la
+ commande est exécutée via /bin/sh, et sous Windows via
+ lâinterpréteur de commande.
ou, sous Windows
+ La fonctionnalité exec constitue un risque de sécurité
+ significatif. En effet, elle exécute des commandes arbitraires avec les
+ privilèges du processus du serveur web. Si les utilisateurs peuvent éditer
+ du contenu sur votre site, assurez-vous que cette fonctionnalité soit
+ désactivée en spécifiant IncludesNOEXEC au lieu de
+ Includes dans la définition de la directive
Vous noterez probablement l'étrange formatage provoqué par cette
- directive sous Windows, car la sortie de dir contient
- la chaîne de caractères "<dir>", ce qui trompe le
- navigateur.
Notez que cette fonctionnalité est très dangereuse, car elle va
- permettre d'exécuter tout code associé à l'élément
- exec. Si vous êtes dans la situation où les
- utilisateurs peuvent éditer le contenu de vos pages web, dans le cas
- d'un "livre d'or" par exemple, assurez-vous de désactiver cette
- fonctionnalité. Vous pouvez, tout en permettant les SSI, désactiver
- la fonctionnalité exec à l'aide de l'argument
- IncludesNOEXEC de la directive
- Options.
Outre l'affichage de contenu, les SSI d'Apache vous permettent de - définir des variables, et de les utiliser dans des comparaisons et - des conditions.
+Au-delà de la simple inclusion de contenu, les SSI prennent en charge les + variables et les expressions conditionnelles, rendant possible la génération + de contenus différents en fonction du contexte de la requête.
Avec l'élément set, vous pouvez définir des
- variables pour un usage ultérieur. Comme nous en aurons besoin plus
- loin, nous allons en parler tout de suite. La syntaxe se présente
- comme suit :
La directive set permet de définir des variables à utiliser
+ plus tard dans la page :
Pour affecter une valeur à vos variables, en plus de la
- définition littérale de l'exemple ci-dessus, vous pouvez utiliser
- une autre variable, y compris les variables d'environnement, ou les variables
- décrites plus haut (comme LAST_MODIFIED par exemple).
- Pour indiquer qu'il s'agit d'une variable et non d'une chaîne, vous
- devez utiliser le symbole dollar ($) devant le nom de la
- variable.
Les variables peuvent référencer dâautres variables (y compris des variables dâenvironnement) en utilisant le signe dollar
+ ($) comme préfixe :
Pour inclure un signe dollar littéral, protégez-le avec une + contre-oblique :
-Pour insérer un caractère $ dans la valeur de votre variable, - vous devez l'échapper à l'aide d'un backslash.
Enfin, si vous voulez insérer une variable dans une chaîne, et - s'il y a une chance pour que le nom de la variable se confonde avec - le reste de la chaîne, vous pouvez l'entourer d'accolades pour - eviter toute confusion (Il est difficile de trouver un bon exemple - pour illustrer ceci, mais j'espère que vous comprendrez).
+Lorsqu'un nom de variable risque d'être ambigu au sein d'une chaîne plus + longue, utilisez des accolades pour le délimiter :
+Maintenent que nous avons des variables, et que nous pouvons
- définir et comparer leurs valeurs, nous sommes à même de les
- utiliser dans des expressions conditionnelles. Ceci confère à SSI le
- statut de petit langage de programmation.
- if,
- elif, else, endif pour la
- construction d'expressions conditionnelles, ce qui vous permet de
- générer plusieurs pages logiques à partir d'une seule vraie
- page.
La structure de l'expression conditionnelle est :
+if,
+ elif, else et endif permettant de
+ construire une logique conditionnelle. Cette fonctionnalité permet de
+ générer des sorties différentes à partir dâune seule page physique.
La structure est :
+Une condition peut revêtir la forme de toute comparaison
- logique - soit une comparaison de valeurs avec une autre, soit une
- vérification de la "vérité" d'une valeur particulière (Une chaîne
- donnée est vraie si elle n'est pas vide). Pour une liste exhaustive
- des opérateurs de comparaison disponibles, voir la documentation du
- module
Une test_condition peut comparer des valeurs ou vérifier si une
+ variable nâest pas vide. Voir la documentation de
+
Par exemple, spour insérer l'heure du jour dans votre page web, - vous pouvez ajouter ces lignes dans la page HTML :
+Par exemple, pour afficher des salutations différentes en fonction de + lâheure du jour :
-Toute autre variable (que vous avez définie, ou une variable - d'environnement normale) peut être utilisée dans les expressions - conditionnelles. Voir le document Expressions - rationnelles dans le serveur HTTP Apache pour plus de détails à - propos du fonctionnement du moteur d'évaluation des expressions - rationnelles.
- -Associée à la possibilité avec Apache de définir
- des variables d'environnement à l'aide de directives
- SetEnvIf, ainsi que d'autres directives en rapport,
- cette fonctionnalité vous permet d'ajouter une grande variété
- de contenus dynamiques côté serveur sans avoir à concevoir une
- application web de A Ã Z.
Toute variable â définie par lâutilisateur ou issue de lâenvironnement + â peut être utilisée dans les expressions conditionnelles. Voir Les expressions dans le Serveur HTTP Apache pour des + détails complets à propos du moteur dâévaluation des expressions.
+ +Combinées avec la capacité de httpd à définir des variables
+ dâenvironnement en utilisant
SSI ne remplace certainement pas CGI, ou d'autres technologies - utilisées pour la génération de pages web dynamiques. Mais c'est une - bonne méthode pour ajouter des petits contenus dynamiques à vos - pages, sans devoir fournir un gros effort supplémentaire.
+Pour les sites principalement statiques mais nécessitant quelques touches
+ dynamiques, les SSI évitent la surcharge de travail induite par la
+ configuration dâune pile complète dâapplications. Elles ne requièrent que
+