Lorsque tu débutes en HTML, il est tentant de copier-coller des sections HTML communes (comme les en-têtes, les menus ou les pieds de page) dans chaque fichier de ton site. Mais ce n’est pas une bonne pratique. PHP propose des solutions pour éviter ce travail répétitif et faciliter la maintenance grâce aux fonctions include, require, et require_once.
include & require : un site plus facile à maintenirÀ la fin de ce cours, tu seras capable de :
include et require pour insérer des fichiers PHP dans une pageinclude, require, include_once et require_once| # | Notion | En une phrase |
|---|---|---|
| 1 | DRY (Don't Repeat Yourself) | Ne jamais écrire deux fois le même code |
| 2 | include |
Insère le contenu d'un fichier, continue si introuvable |
| 3 | require |
Insère le contenu d'un fichier, plante si introuvable |
| 4 | _once |
Garantit qu'un fichier n'est inséré qu'une seule fois |
| 5 | Fichier partiel | Un fichier PHP qui ne s'affiche pas seul, mais est conçu pour être inclus |
Imagine un site web avec 5 pages : index.php, agenda.php, contact.php, artistes.php, billetterie.php.
Chaque page contient ce menu de navigation :
<nav>
<a href="index.php">Accueil</a>
<a href="agenda.php">Agenda</a>
<a href="artistes.php">Artistes</a>
<a href="billetterie.php">Billetterie</a>
<a href="contact.php">Contact</a>
</nav>
Scénario catastrophe : ton client veut ajouter un lien "Galerie" dans le menu.
➡️ Tu dois ouvrir 5 fichiers et modifier 5 fois le même code HTML. ➡️ Tu oublies un fichier → le site est incohérent. ➡️ Tu fais une faute de frappe → le site est cassé sur une page.
💡 Principe DRY : si tu copies-colles du code, c'est le signe qu'il faut le centraliser dans un seul fichier.
mon-site/
│
├── includes/ ← les fichiers partiels (jamais appelés directement)
│ ├── header.php
│ ├── menu.php
│ └── footer.php
│
├── index.php
├── agenda.php
├── artistes.php
├── billetterie.php
└── contact.php
📁 Le dossier
includes/contient des fichiers partiels : des morceaux de page, pas des pages complètes.
include et require en pratique<?php include 'includes/header.php'; ?>
<?php include 'includes/menu.php'; ?>
<!-- Contenu spécifique à cette page -->
<?php include 'includes/footer.php'; ?>
includes/header.php
<!DOCTYPE html>
<html lang="fr">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Mon Site</title>
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css" rel="stylesheet">
</head>
<body>
includes/menu.php
<nav class="navbar navbar-expand-lg navbar-dark bg-dark">
<div class="container">
<a class="navbar-brand" href="index.php">MonSite</a>
<ul class="navbar-nav">
<li class="nav-item"><a class="nav-link" href="index.php">Accueil</a></li>
<li class="nav-item"><a class="nav-link" href="agenda.php">Agenda</a></li>
<li class="nav-item"><a class="nav-link" href="artistes.php">Artistes</a></li>
<li class="nav-item"><a class="nav-link" href="contact.php">Contact</a></li>
</ul>
</div>
</nav>
includes/footer.php
<footer class="bg-dark text-white text-center py-3 mt-5">
<p>© <?php echo date('Y'); ?> MonSite — Tous droits réservés</p>
</footer>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/js/bootstrap.bundle.min.js"></script>
</body>
</html>
index.php
<?php include 'includes/header.php'; ?>
<?php include 'includes/menu.php'; ?>
<main class="container mt-4">
<h1>Bienvenue sur MonSite</h1>
<p>Voici la page d'accueil.</p>
</main>
<?php include 'includes/footer.php'; ?>
agenda.php
<?php include 'includes/header.php'; ?>
<?php include 'includes/menu.php'; ?>
<main class="container mt-4">
<h1>Agenda</h1>
<p>Les prochains événements arrivent bientôt !</p>
</main>
<?php include 'includes/footer.php'; ?>
✅ Résultat : pour ajouter un lien dans le menu, tu modifies un seul fichier (
menu.php), et toutes les pages sont automatiquement mises à jour.
include vs require : quelle différence ?include |
require |
|
|---|---|---|
| Fichier introuvable | ⚠️ Avertissement, le script continue | ❌ Erreur fatale, le script s'arrête |
| Quand l'utiliser ? | Éléments facultatifs (widget, bandeau promo...) | Éléments indispensables (header, connexion DB...) |
<?php
// Si ce fichier est absent → erreur fatale, on ne peut pas afficher la page sans connexion DB
require 'includes/connexion.php';
// Si ce fichier est absent → simple avertissement, la page s'affiche quand même
include 'includes/bandeau-promo.php';
?>
💡 Règle pratique : utilise
requirepour tout ce qui est vital (connexion base de données, authentification, header...). Utiliseincludepour tout ce qui est optionnel.
include_once et require_once_once<?php
include 'includes/connexion.php'; // Connexion à la BD → OK
// ... du code ...
include 'includes/connexion.php'; // Connexion une 2e fois → erreur ou doublon !
?>
Si connexion.php définit une variable $conn ou une fonction, l'inclure deux fois peut provoquer des erreurs (variable redéfinie, fonction déjà déclarée...).
_once<?php
require_once 'includes/connexion.php'; // Inclus une seule fois, même si appelé plusieurs fois
require_once 'includes/connexion.php'; // PHP ignore cet appel silencieusement
?>
_once ?| Fichier | Recommandation |
|---|---|
connexion.php (connexion BD) |
✅ require_once |
fonctions.php (tes fonctions) |
✅ require_once |
header.php |
require suffit (pas de risque de doublon en pratique) |
menu.php |
include suffit |
💡 Bonne habitude : utilise systématiquement
require_oncepour les fichiers qui définissent des fonctions ou des variables de configuration.
Le header contient <title>Mon Site</title> pour toutes les pages... ce n'est pas idéal pour le référencement ni pour l'utilisateur.
<?php
$titrePage = "Agenda — MonSite"; // ← défini AVANT d'inclure le header
require 'includes/header.php';
?>
includes/header.php (modifié)
<!DOCTYPE html>
<html lang="fr">
<head>
<meta charset="UTF-8">
<title><?php echo $titrePage ?? 'MonSite'; ?></title>
...
💡
$titrePage ?? 'MonSite': si$titrePagen'est pas défini, affiche'MonSite'par défaut (opérateur null-coalescing).
Maintenance simplifiée :
header.php ou footer.php, et les changements s’appliquent automatiquement partout.Réduction des erreurs :
require_once, tu évites les erreurs causées par des inclusions multiples accidentelles.Code plus propre :
Meilleure organisation :
header.php, footer.php, etc.) permettent de structurer ton projet.Chemins relatifs :
header.php est dans un dossier includes, tu dois inclure le fichier ainsi :include 'includes/header.php';
Erreurs silencieuses avec include :
include manque, PHP affichera un avertissement, mais continuera d'exécuter le script. Cela peut entraîner des erreurs invisibles. Utilise require si le fichier est indispensable.Sécurité :
include 'fichier.php' → insère le fichier (continue si absent)
require 'fichier.php' → insère le fichier (STOP si absent)
include_once 'fichier.php' → idem include, mais une seule fois
require_once 'fichier.php' → idem require, mais une seule fois
Quand utiliser quoi ?
include ou requirerequire_onceincludemon-site/ avec un sous-dossier includes/header.php, menu.php, footer.php dans includes/index.php, about.php, contact.phpCritère de réussite : modifier le menu en un seul endroit doit changer les 3 pages.
Reprends l'exercice 1 et fais en sorte que chaque page affiche un titre différent dans l'onglet du navigateur (<title>), sans modifier header.php sur chaque page.
includes/connexion.php qui établit une connexion PDO à une base de données MySQLarticles avec quelques entrées (id, titre, contenu)index.php, utilise require_once 'includes/connexion.php' puis affiche la liste des articles⚠️ Que se passe-t-il si tu remplaces
require_onceparincludeet que tu effaces temporairement le fichierconnexion.php? Teste et observe.
Les fonctions include, require, et require_once en PHP simplifient grandement la gestion des sections HTML répétées dans un site. En centralisant les fichiers communs, tu gagnes du temps, réduis les erreurs et rends ton code plus lisible. Apprends à les utiliser dès maintenant pour structurer proprement tes projets PHP ! 🚀