logo oujood
🔍

Les instructions include() et require() en PHP

Découvrez comment inclure un fichier PHP dans un autre avec les instructions include() et require().
Ces fonctions permettent de réutiliser du code PHP, d'inclure des templates, des menus ou des en-têtes dans vos pages web. Apprenez la différence entre include et require, leur gestion des erreurs, et comment structurer un site PHP modulaire.

OUJOOD.COM

Rôle des instructions include et require

COURS PHP

include() et require() insèrent le contenu d'un fichier PHP externe dans le fichier courant, avant son exécution. C'est le mécanisme de base pour éviter de répéter le même code — en-tête, menu, pied de page, fichier de configuration — sur chaque page d'un site.

Les deux instructions accomplissent la même chose, mais leur comportement diffère quand le fichier est introuvable : include() génère un avertissement et continue, require() stoppe le script immédiatement.

include("chemin/fichier.php");  —  ou  —  include "chemin/fichier.php";
require("chemin/fichier.php");  —  ou  —  require "chemin/fichier.php";


La fonction include()

Quand le fichier demandé est introuvable, include() déclenche une alerte E_WARNING et laisse le script poursuivre. C'est le bon choix pour les éléments non critiques — une bannière publicitaire, un widget facultatif — dont l'absence ne doit pas bloquer la page.

Exemple 1 : inclure un en-tête de page

Exemple :  📋 Copier le code

<html>
<body>

<?php
// Inclusion de l'en-tête commun du site
include("header.php");
?>

<h1>Page d'accueil</h1>
<p>Bienvenue sur la page d'accueil.</p>

</body>
</html>

Exemple 2 : menu de navigation réutilisable

Fichier menu.php :

Exemple :  📋 Copier le code

<!-- menu.php -->
<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="/contact.php">Contact</a></li>
</ul>

Inclusion dans une page :

Exemple :  📋 Copier le code

<html>
<body>
<div class="leftmenu">
<?php include("menu.php"); ?>
</div>

<h1>Bienvenue</h1>
<p>Contenu de la page.</p>
</body>
</html>

Pour modifier un lien dans le menu, il suffit d'éditer menu.php — toutes les pages reflètent le changement automatiquement.


La fonction require()

require() fonctionne comme include(), mais déclenche une erreur fatale E_COMPILE_ERROR si le fichier est manquant, ce qui arrête immédiatement l'exécution. Utilisez-la pour les fichiers indispensables : connexion base de données, fichier de configuration, classes critiques.

Comparaison : include() vs require() face à un fichier manquant

Exemple :  📋 Copier le code

<?php
// include() : warning + le script continue
include("inexistant.php");
echo "Ce message s'affiche quand même.";
?>

Warning: include(inexistant.php): Failed to open stream: No such file or directory
Ce message s'affiche quand même.

Exemple :  📋 Copier le code

<?php
// require() : erreur fatale, le script s'arrête
require("inexistant.php");
echo "Ce message ne s'affiche jamais.";
?>

Fatal error: require(): Failed opening required 'inexistant.php'


Architecture modulaire : exemple complet

L'approche la plus courante découpe la structure HTML en trois fichiers — haut.php, pied.php — que chaque page de contenu inclut.

Fichier haut.php

Exemple :  📋 Copier le code

<!-- haut.php : doctype, head, en-tête et menu -->
<!DOCTYPE html>
<html lang="fr">
<head>
    <meta charset="utf-8">
    <title>Mon site</title>
    <link rel="stylesheet" href="style.css">
</head>
<body>
<div id="entete"><h1>Titre du site</h1></div>
<div id="menu">
    <a href="page1.php">Page 1</a>
    <a href="page2.php">Page 2</a>
    <a href="page3.php">Page 3</a>
</div>

Fichier pied.php

Exemple :  📋 Copier le code

<!-- pied.php : pied de page et fermeture HTML -->
<div id="bas"><p>© 2026 Mon site</p></div>
</body>
</html>

Page de contenu

Exemple :  📋 Copier le code

<?php include("haut.php"); ?>

<div id="corps">
    <h2>Titre de la page</h2>
    <p>Contenu spécifique à cette page.</p>
</div>

<?php include("pied.php"); ?>

Inclusion dynamique et sécurité (LFI)

Passer le nom du fichier à inclure via un paramètre GET est tentant, mais dangereux sans validation. C'est la faille dite Local File Inclusion (LFI) — un attaquant peut manipuler l'URL pour inclure des fichiers système ou du code malveillant.

Code vulnérable — à ne jamais utiliser en production

Exemple :  📋 Copier le code

<?php
// DANGEREUX : aucune validation
// URL possible : ?page=../../../etc/passwd
$page = $_GET['page'];
include("$page.php");
?>

Version sécurisée — liste blanche explicite

Exemple :  📋 Copier le code

<?php
// Seules les valeurs connues déclenchent une inclusion
// Toute autre valeur affiche la page d'accueil par défaut
$pages_autorisees = ['menu1', 'menu2', 'menu3'];

if (isset($_GET['page']) && in_array($_GET['page'], $pages_autorisees, true)) {
    include($_GET['page'] . '.php');
} else {
    include('accueil.php');
}
?>

La fonction in_array() avec le troisième paramètre true effectue une comparaison stricte (type + valeur). Toute valeur hors liste est ignorée — aucun fichier non autorisé ne peut être chargé.


include_once() et require_once()

Ces variantes garantissent qu'un fichier n'est inclus qu'une seule fois, même si l'instruction est rencontrée plusieurs fois. C'est indispensable pour les fichiers contenant des définitions de fonctions ou de classes — PHP interdit de les déclarer deux fois.

Problème avec require() classique

Fichier mes_fonctions.php :

Exemple :  📋 Copier le code

<?php
function carre($n) {
    return $n * $n;
}
?>

Exemple :  📋 Copier le code

<?php
require "mes_fonctions.php";
echo carre(2);    // 4

require "mes_fonctions.php";  // Erreur fatale : redéclaration de carre()
echo carre(5);
?>

Fatal error: Cannot redeclare carre() (previously declared in mes_fonctions.php:2)

Solution avec require_once()

Exemple :  📋 Copier le code

<?php
require_once "mes_fonctions.php";
echo carre(2);    // 4

require_once "mes_fonctions.php";  // Ignoré, déjà inclus
echo carre(5);    // 25 — aucune erreur
?>

Tableau comparatif des quatre instructions

Instruction Fichier manquant Inclusion multiple Usage typique
include() Warning — script continue Autorisée Éléments optionnels, templates dans une boucle
require() Erreur fatale — script arrêté Autorisée Fichiers critiques inclus plusieurs fois (ex. dans une boucle)
include_once() Warning — script continue Bloquée Templates avec définitions, composants réutilisables
require_once() Erreur fatale — script arrêté Bloquée Fichiers de config, classes, connexion base de données

Note PHP 8.5 (2026)

include() et require() n'ont subi aucun changement de comportement dans les versions récentes de PHP. Ces instructions restent identiques depuis PHP 4. En revanche, PHP 8.5 (sorti en novembre 2025) renforce le typage strict : passer null à une fonction native attendant une chaîne — comme un chemin de fichier — déclenche désormais une TypeError. Vérifiez toujours que vos variables de chemin ne sont pas null avant l'inclusion.

Exemple :  📋 Copier le code

<?php
// Bonne pratique PHP 8.5 : vérifier la valeur avant inclusion
$fichier = $_GET['config'] ?? null;

if ($fichier !== null && in_array($fichier, ['config_dev', 'config_prod'], true)) {
    require_once $fichier . '.php';
}
?>

Cours précédent :
La fonction date()

Sommaire PHP

Cours suivant :
Les cookies

Par carabde – mis à jour mai 2026