Niveau Niveau débutant

Inclure un fichier dans un autre grâce à PHP

Tutorieldéveloppement

Publié par le , mis à jour le (251325 lectures)

include inclure php développement pseudo-frame

Tout site possède au moins une partie commune à chaque page. Partant de ce constat, pourquoi ne pas insérer de manière dynamique ces éléments et éviter ainsi de dupliquer les portions de codes répétées d'une page à l'autre ?

Faciliter la maintenance d'un site et permettre son évolution sans avoir besoin de tout reprendre, tel est le principal attrait de cette méthode. Alors, si comme bon nombre d'entre nous, vous êtes légèrement fainéant sur les bords, et trouvez dommage de vous embêter à ré-écrire une partie de votre code alors qu'une simple ligne suffit ... Ce tutoriel est fait pour vous !

Il vous détaille, pas à pas, la façon de procéder pour inclure un élément sur une ou plusieurs pages de votre site, au moyen de la fonction include().

Sommaire

  1. Qu'est-ce que la fonction include ?
  2. Aller plus loin...

Qu'est-ce que la fonction include ?

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.