Pré-requis : comprendre le fonctionnement de l’include()
Avant toute chose, il est important d’appréhender le mécanisme de la fonction. Cela permettra, par la suite, d’éviter un certain nombre d’erreurs dues à sa mauvaise compréhension.
L’utilisation d’un include()
revient à faire un simple copié-collé : le code du fichier appelé est inséré à l’intérieur de la page appelante, à l’endroit exact où se trouve la fonction. Elle peut être placée n’importe où, à l’intérieur du code source : entre les balises <head>
et </head>
ou <body>
et </body>
, par exemple.
Le navigateur ne visualisera qu’un seul et même document avec, en lieu et place de votre include()
, le contenu du fichier inclus. Afin d’éviter toute erreur, il est préférable d’utiliser des adresses (URLs) absolues, avec le chemin complet par rapport à la racine du site. Si le fichier inclus comporte des liens, ceux-ci pointeront toujours d’après l’adresse de la page appelante. Par conséquent, il suffit qu’un même fichier soit inclus dans des pages de niveaux différents (ex : /fruits/ et /fruits/pommes/ ) pour que les adresses relatives deviennent obsolètes. Par exemple, pour atteindre un fichier situé dans le dossier fruits, nous préférerons l’écriture absolue <a href="/fruits/kiwi.php">page des kiwis</a>
à l’écriture relative <a href="fruits/kiwi.php">page des kiwis</a>
. Le / précédant l’url indique au navigateur de prendre pour point de départ la racine du site.
Le fichier inclus peut être de n’importe quel type (HTML, JavaScript, PHP, Texte…) et avoir n’importe quelle extension (.htm, .php, .tpl, .kiwi, …) : seul le contenu du fichier importe réellement. Il n’est pas à considérer comme une page à part entière : il n’a pas pour vocation d’être visualisé en tant que tel. L’utilisation d’une extension spécifique significative (comme par exemple .inc.php
-pour include-) permet d’avoir une meilleure visibilité et d’éviter ainsi quelques erreurs.
Pour éviter toute faille de sécurité, nous préférerons utiliser une extension .php
afin que le fichier soit automatiquement interprété et sa source non visualisable dans le navigateur. Toute autre extension permettrait à quiconque d’avoir accès au contenu du fichier, ce qui pourrait se révéler problématique s’il contenait des données confidentielles, comme par exemple des informations de connexion à mysql.
Enfin, n’oubliez pas qu’un include()
est une fonction php
. Il est donc impératif que l’extension de votre page appelante soit de type php.
Exemple d’utilisation
Nous allons inclure les fichiers titre.inc.php
et contenu.inc.php
à l’intérieur de la page test.php
. Ci-dessous, le contenu des trois fichiers :
titre.inc.php
Alsacréations vous conseille de manger des kiwis.
contenu.inc.php
Mangez des kiwis, ça vous réussit…
Mais rassurez-vous, une pomme, ça va aussi !
test.php
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
xml:lang="fr" lang="fr">
<head>
<title><?php include('titre.inc.php'); ?></title>
</head><body>
<h1><?php include('contenu.inc.php'); ?></h1>
</body>
</html>
Au final, le navigateur visualisera test.php
comme ceci :
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
xml:lang="fr" lang="fr">
<head>
<title>Alsacréations vous conseille de manger des kiwis.</title>
</head><body>
<h1>Mangez des kiwis, ça vous réussit…
Mais rassurez-vous, une pomme, ça va aussi !</h1>
</body>
</html>
Erreur courante
L’erreur la plus classique est l’amalgame qui est fait entre l’utilisation de frames
ou d’iframes
et d’include()
. Là où les frames
et autres iframes
simulent l’insertion d’une page à l’intérieur d’une autre grâce au navigateur, la fonction include()
injecte réellement la totalité du fichier, du côté du serveur web.
Un cas typique : l’insertion d’une page complète au moyen d’un include()
.
page_htm_a_inserer.htm
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
xml:lang="fr" lang="fr">
<head>
<title></title>
</head><body>
<h1>Mangez des kiwis, ça vous réussit…
Mais rassurez-vous, une pomme, ça va aussi !</h1>
</body>
</html>
test.php
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
xml:lang="fr" lang="fr">
<head>
<title>Alsacréations vous conseille de manger des kiwis.</title>
</head><body>
<h1><?php include('page_htm_a_inserer.htm'); ?></h1>
</body>
</html>
Au final, le navigateur visualisera test.php
comme ceci :
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
xml:lang="fr" lang="fr">
<head>
<title>Alsacréations vous conseille de manger des kiwis.</title>
</head><body>
<h1><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
xml:lang="fr" lang="fr">
<head>
<title></title>
</head><body>
<h1>Mangez des kiwis, ça vous réussit…
Mais rassurez-vous, une pomme, ça va aussi !</h1>
</body>
</html></h1>
</body>
</html>
Comme vous pouvez le constater, la totalité du code de la page page_htm_a_inserer.htm
à été inclus dans notre page test.php
.
Il en résulte une imbriquation de deux structures HTML complètes. La page est totalement incohérente et n’a aucune chance d’être interprétée correctement par les navigateurs.