OUJOOD.COM
Comprendre la fonction include en PHP : réutiliser du code efficacement
Les fonctions include() et require() en PHP constituent des outils fondamentaux pour tout développeur souhaitant optimiser l'organisation de son code. Ces instructions permettent d'inclure le contenu d'un fichier PHP dans un autre fichier, évitant ainsi la duplication de code et facilitant la maintenance.
Au lieu de répéter le même bloc de code dans chaque page de votre site web (en-têtes, menus de navigation, pieds de page), vous pouvez stocker ce code dans un fichier séparé et l'inclure où nécessaire. Cette approche modulaire améliore considérablement la maintenabilité de votre application PHP et respecte le principe DRY (Don't Repeat Yourself).
La syntaxe de base des instructions include et require peut s'écrire de deux manières équivalentes :
include("chemin/nomFichier.php"); -Ou- include "chemin/nomFichier.php";
require("chemin/nomFichier.php"); -Ou- require "chemin/nomFichier.php";
Imaginons que vous développez un site web avec plusieurs dizaines de pages. Chaque page contient un en-tête HTML identique, un menu de navigation commun et un pied de page standardisé. Sans les fonctions d'inclusion, vous devriez copier-coller ce code dans chaque fichier, ce qui pose plusieurs problèmes :
- Modification fastidieuse : changer un élément du menu nécessiterait de modifier toutes les pages manuellement
- Risques d'erreurs : oublier de mettre à jour une page créerait des incohérences
- Code volumineux : chaque fichier contiendrait des centaines de lignes répétitives
Grâce à la fonction include() de PHP, vous écrivez ce code une seule fois dans un fichier dédié (par exemple "header.php", "menu.php", "footer.php") et vous l'insérez dynamiquement dans toutes vos pages. Cette méthodologie transforme radicalement votre workflow de développement.
La fonction include() insère le contenu complet d'un fichier PHP dans le fichier courant avant son exécution par le serveur. PHP propose deux fonctions principales pour cette tâche :
- La fonction include() : gestion souple des erreurs
- La fonction require() : gestion stricte des erreurs
Bien que ces deux fonctions accomplissent le même objectif d'inclusion de fichiers PHP, leur comportement diffère significativement en cas d'erreur, comme nous le verrons en détail dans ce tutoriel.
La fonction include() en PHP : inclusion flexible de fichiers
La fonction include() en PHP prend l'intégralité du contenu d'un fichier spécifié et l'incorpore dans le fichier appelant. Cette fonction s'avère particulièrement utile pour inclure des composants optionnels ou des éléments d'interface utilisateur.
Gestion des erreurs avec include() : Si le fichier demandé est introuvable ou inaccessible, include() génère un avertissement PHP (warning) mais permet au script de continuer son exécution. Cette caractéristique rend include() approprié pour les éléments non critiques de votre application.
Exemple 1 : Inclure un en-tête de page avec include()
Créons un scénario réaliste où vous disposez d'un fichier d'en-tête standardisé nommé "header.php" contenant le logo, le titre du site et la navigation principale. Pour inclure cet en-tête dans n'importe quelle page, utilisez la fonction include() :
Exemple : 📋 Copier le code
<html>
<body>
<?php
// Inclusion de l'en-tête commun du site
// Ce fichier contient le logo, le titre et le menu principal
include("header.php");
?>
<h1>Page d'accueil</h1>
<p>Bienvenue sur la page d'accueil de mon site web. Merci de votre visite et bonne navigation !</p>
</body>
</html>
Dans cet exemple, le fichier header.php est inséré automatiquement à l'emplacement de la directive include(). Le navigateur reçoit une page HTML complète comme si tout le code avait été écrit dans un seul fichier.
Exemple 2 : Créer un menu de navigation réutilisable
Un des cas d'usage les plus courants de la fonction include PHP concerne les menus de navigation. Plutôt que de dupliquer le code HTML du menu sur chaque page, créons un fichier "menu.php" contenant la structure complète de navigation :
Exemple : 📋 Copier le code
<!-- Fichier menu.php : Menu de navigation principal du site -->
<ul>
<li><a href="/default.php">Accueil</a></li>
<li><a href="/tutorials.php">Tutoriaux</a></li>
<li><a href="/references.php">Références</a></li>
<li><a href="/examples.php">Exemples</a></li>
<li><a href="/about.php">Qui suis-je ?</a></li>
<li><a href="/contact.php">Contact</a></li>
</ul>
Maintenant, incluez ce menu dans toutes les pages de votre site en une seule ligne de code :
Exemple : 📋 Copier le code
<html>
<body>
<div class="leftmenu">
<?php
// Inclusion du menu de navigation depuis le fichier externe
// Permet de centraliser la gestion du menu pour tout le site
include("menu.php");
?>
</div>
<h1>Bienvenue sur mon site web</h1>
<p>Découvrez nos contenus et ressources pour apprendre la programmation PHP.</p>
</body>
</html>
Résultat de l'inclusion : code HTML généré
Lorsque vous consultez le code source HTML généré par PHP dans votre navigateur, le fichier menu.php a été fusionné avec le reste du code. Voici ce que le navigateur reçoit réellement :
Exemple : 📋 Copier le code
<!-- Code HTML final envoyé au navigateur après traitement PHP -->
<html>
<body>
<div class="leftmenu">
<ul>
<li><a href="/default.php">Accueil</a></li>
<li><a href="/tutorials.php">Tutoriaux</a></li>
<li><a href="/references.php">Références</a></li>
<li><a href="/examples.php">Exemples</a></li>
<li><a href="/about.php">Qui suis-je ?</a></li>
<li><a href="/contact.php">Contact</a></li>
</ul>
</div>
<h1>Bienvenue sur mon site web</h1>
<p>Découvrez nos contenus et ressources pour apprendre la programmation PHP.</p>
</body>
</html>
L'avantage majeur de cette approche modulaire : si vous souhaitez ajouter un nouvel élément au menu ou modifier un lien, vous n'intervenez que sur le fichier menu.php. Toutes les pages de votre site reflèteront automatiquement cette modification.
La fonction require() en PHP : inclusion stricte et obligatoire
La fonction require() en PHP fonctionne de manière identique à include() pour ce qui est de l'insertion de fichiers, mais elle adopte une gestion des erreurs beaucoup plus stricte.
Différence critique entre include() et require() :
- include() : En cas d'erreur (fichier introuvable), génère un warning (avertissement) et le script continue
- require() : En cas d'erreur, génère une erreur fatale (fatal error) et arrête immédiatement l'exécution
Cette distinction est fondamentale pour la robustesse de votre application PHP. Utilisez require() pour les fichiers essentiels au fonctionnement de votre script (fichiers de configuration, connexions base de données, classes critiques).
Démonstration : comportement de include() face à une erreur
Testons le comportement d'include() lorsque le fichier demandé n'existe pas. Exécutez ce code sans créer le fichier Fichier.php :
Exemple : 📋 Copier le code
<html>
<body>
<?php
// Tentative d'inclusion d'un fichier inexistant
// include() génère un warning mais continue l'exécution
include("Fichier.php");
echo "Bonjour le monde !";
?>
</body>
</html>
Message d'erreur affiché :
Warning: include(fichier.php) [function.include]:
failed to open stream:
no such file or directory in c:\home\website\fichier.php on line 5
Bonjour le monde !
Observation importante : Malgré l'avertissement, la ligne "echo" s'est bien exécutée et le message "Bonjour le monde !" s'affiche. Le script PHP a continué son exécution normale après l'erreur d'inclusion. Ce comportement peut être souhaitable pour des éléments optionnels de votre site.
Démonstration : comportement de require() face à une erreur
Reprenons exactement le même exemple mais avec require() au lieu d'include() :
Exemple : 📋 Copier le code
<html>
<body>
<?php
// Tentative d'inclusion d'un fichier inexistant avec require()
// require() génère une erreur fatale et arrête tout
require("Fichier.php");
echo "Bonjour le monde !";
?>
</body>
</html>
Message d'erreur affiché :
Warning: require(ficher.php) [function.require]:
failed to open stream:
no such file or directory in c:\home\website\fichier.php on line 5
Différence cruciale : La ligne "echo" n'a jamais été exécutée ! Le message "Bonjour le monde !" n'apparaît pas car require() a stoppé l'exécution du script dès la détection de l'erreur.
Recommandation pratique : Utilisez require() pour inclure des fichiers critiques dont votre application ne peut se passer. Si un fichier de configuration ou une classe essentielle est manquant, il est préférable d'arrêter l'exécution plutôt que de produire des résultats imprévisibles.
Exercice pratique : Construire un site PHP modulaire complet
Mettons en pratique les fonctions include() et require() PHP en créant un site web structuré de manière professionnelle. Notre site comportera :
- Un en-tête avec le titre du site
- Un menu de navigation latéral
- Un corps de page dynamique avec contenu variable
- Un pied de page standardisé
Avant d'utiliser PHP, voici le code HTML de base qui structure notre page. Si vous débutez en HTML, consultez notre cours HTML complet.
Structure HTML initiale du site
Exemple : 📋 Copier le code
<!-- Structure HTML complète d'une page web classique --> <!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"> <head> <title>Titre du site</title> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"/> <link rel="stylesheet" media="screen" type="text/css" title="style" href="style.css"/> </head> <body> <!-- En-tête de la page contenant le logo et le titre --> <div id="entete"> <h1>Titre du site</h1> </div> <!-- Menu de navigation latéral --> <div id="menu"> <div class="element_menu"> <a href="page1.html">Menu 1</a><br/> </div> <div class="element_menu"> <a href="page2.html">Menu 2</a><br/> </div> <div class="element_menu"> <a href="page3.html">Menu 3</a><br/> </div> </div> <!-- Corps principal de la page avec contenu --> <div id="corps"> <h2>Titre de la page</h2> <p>Contenu de la page, contenu de la page, contenu de la page, contenu de la page, contenu de la page, contenu de la page. </p> </div> <!-- Pied de page avec informations de copyright --> <div id="bas"> <p>Contenu du pied de page</p> </div> </body> </html>
Feuille de style CSS pour la mise en page
Voici le code CSS qui stylise notre structure HTML et crée une mise en page professionnelle :
Exemple : 📋 Copier le code
/* Styles globaux du site */ body { width:770px; margin:auto; /* Centre la page horizontalement */ margin-top:20px; /* Espace avec le haut du navigateur */ margin-bottom:20px; /* Espace avec le bas du navigateur */ background-color: #CCCCCC; color:#000000; } /* Styles de l'en-tête */ #entete { width:770px; height:100px; margin-bottom: 10px; border: 1px solid black; background-color:#333399; color: #FFFFFF; } /* Styles du corps principal */ #corps { margin-left: 154px; /* Laisse place au menu latéral */ margin-bottom: 5px; padding: 10px; margin-right: 1px; color: #FFFFFF; background-color: #524222; border: 1px solid #FFFFFF; } /* Styles du menu de navigation */ #menu { width:140px; /* Largeur fixe du menu */ border: 1px solid #FFFFFF; margin-top: 0px; float:left; /* Le menu flotte à gauche du contenu */ padding: 5px; } /* Styles du pied de page */ #bas { height:80px; padding: 5px; margin-bottom: 5px; margin-top: 5px; text-align: center; color: #B3B3B3; background-color: #525262; border: 1px solid #FFFFFF; } /* Styles des éléments individuels du menu */ .element_menu { color: #00FFFF; border: 2px solid black; margin-bottom: 5px; /* Espacement entre les éléments */ } /* Styles des titres */ h1 { text-align: center; color: #00CCFF; } h2 { text-align: center; color: #FF00FF; }
Méthode 1 : Architecture modulaire sécurisée (approche recommandée)
Cette première méthode offre une meilleure sécurité contre les attaques et représente la meilleure pratique en développement PHP. L'idée : découper la structure HTML en fichiers séparés que nous inclurons dans chaque page de contenu.
Avantages de cette méthode :
- Sécurité renforcée : aucune manipulation d'URL possible
- Clarté du code : chaque fichier a un rôle précis
- Maintenance facilitée : modifier l'en-tête se fait en un seul endroit
Créons trois fichiers PHP distincts :
Fichier "haut.php" : En-tête et menu
Exemple : 📋 Copier le code
<!-- Fichier haut.php : contient tout le code jusqu'au menu inclus --> <!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"> <head> <title>Titre du site</title> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"/> <link rel="stylesheet" media="screen" type="text/css" title="style" href="style.css"/> </head> <body> <!-- En-tête du site --> <div id="entete"> <h1>Titre du site</h1> </div> <!-- Menu de navigation --> <div id="menu"> <div class="element_menu"> <a href="page1.php">Menu 1</a><br/> </div> <div class="element_menu"> <a href="page2.php">Menu 2</a><br/> </div> <div class="element_menu"> <a href="page3.php">Menu 3</a><br/> </div> </div>
Fichier "pied.php" : Pied de page et fermeture HTML
Exemple : 📋 Copier le code
<!-- Fichier pied.php : contient le pied de page et ferme les balises HTML -->
<div id="bas">
<p>Contenu du pied de page</p>
</div>
</body>
</html>
Fichier "corps.php" : Page de contenu principal
Chaque page de votre site aura cette structure simple qui inclut l'en-tête et le pied de page automatiquement :
Exemple : 📋 Copier le code
<?php // Inclusion de l'en-tête et du menu (début de page) include("haut.php"); ?> <!-- Contenu spécifique de cette page --> <div id="corps"> <h2>Titre de la page</h2> <p>Contenu de la page, contenu de la page, contenu de la page. Contenu de la page, contenu de la page, contenu de la page. </p> </div> <?php // Inclusion du pied de page (fin de page) include("pied.php"); ?>
Cette architecture permet de créer autant de pages que nécessaire avec un minimum de code. Vous pouvez nommer vos fichiers comme vous le souhaitez (header.php, footer.php, etc.).
Méthode 2 : Template global avec inclusion dynamique
La seconde approche inverse la logique : au lieu que chaque page inclue l'en-tête et le pied, nous créons un fichier template complet qui inclut dynamiquement le contenu.
Avantages :
- Changement de design global en modifiant un seul fichier
- Toute la structure est centralisée
Inconvénients :
- Risques de sécurité si mal implémentée (injection de code)
- Nécessite une validation stricte des paramètres
Fichier "page.php" : Template global du site
Exemple : 📋 Copier le code
<!-- Fichier page.php : template complet avec inclusion dynamique du contenu --> <!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"> <head> <title>Titre du site</title> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"/> <link rel="stylesheet" media="screen" type="text/css" title="style" href="style.css"/> </head> <body> <!-- En-tête fixe du site --> <div id="entete"> <h1>Titre du site</h1> </div> <!-- Menu de navigation --> <div id="menu"> <div class="element_menu"> <a href="page1.php">Menu 1</a><br/> </div> <div class="element_menu"> <a href="page2.php">Menu 2</a><br/> </div> <div class="element_menu"> <a href="page3.php">Menu 3</a><br/> </div> </div> <?php // Inclusion du contenu dynamique de la page // Ce fichier change selon la page demandée include("corps.php"); ?> <!-- Pied de page fixe --> <div id="bas"> <p>Contenu du pied de page</p> </div>