require, include, require_once, include_once en PHP : que choisir et pourquoi c'est important ?
\n\nAvez-vous déjà eu ce moment de doute : « Mais quelle est la différence entre require et include en PHP ? Et pourquoi a-t-on inventé ces versions _once ? » — Si oui, vous n'êtes pas seul. Cette question fait partie du top des questions les plus populaires sur Stack Overflow (des milliers de vues et des dizaines de votes). Et ce n'est pas un hasard.
Chaque jour, des milliers de développeurs PHP — des débutants aux experts — utilisent ces fonctions. Mais beaucoup les utilisent par automatisme, sans réfléchir aux conséquences. Et c'est une erreur. Un mauvais choix peut entraîner des erreurs fatales, des duplications de code ou, pire encore, des bugs sournois qui ne se manifesteront qu'en production.
\n\nAujourd'hui, nous allons une bonne fois pour toutes comprendre les différences entre require, include, require_once et include_once. Vous découvrirez non seulement la théorie, mais aussi des exemples de code concrets que vous pourrez exécuter immédiatement. C'est parti !
1. Les bases : pourquoi inclure des fichiers ?
\n\nAvant de parler des différences, rappelons-nous pourquoi nous faisons cela. Dans les projets réels, le code PHP n'est pas écrit dans un seul fichier géant. Ce serait un cauchemar à maintenir. Au lieu de cela, le code est divisé en modules :
\n\n- \n
- Configuration —
config.php\n - Fonctions —
functions.php\n - Templates —
header.php,footer.php\n - Classes —
User.php,Database.php\n
C'est là que require et include entrent en jeu. Ils « collent » littéralement le contenu d'un fichier dans un autre. PHP traite le fichier inclus comme si son code avait été écrit directement à cet endroit.
2. require vs include : la différence clé — la réaction aux erreurs
\n\nC'est le point le plus important. Retenez-le une fois pour toutes.
\n\ninclude — inclusion souple
\n\ninclude tente d'inclure un fichier. Si le fichier n'existe pas ou si une erreur se produit, PHP émet un Warning (avertissement), mais continue l'exécution du script.
<?php\n// include.php\necho "Ceci est un include. ";\ninclude 'fichier_inexistant.php'; // Déclenche un Warning\necho "Le script continue son exécution !";\n?>\n\n\nRésultat :
\nCeci est un include. Warning: include(fichier_inexistant.php): failed to open stream...\nLe script continue son exécution !\n\nVous voyez ? Le script ne s'est pas arrêté, il a continué. C'est pratique lorsque l'inclusion d'un fichier est optionnelle. Par exemple, si vous incluez un widget qui n'est pas critique pour le fonctionnement de la page.
\n\nrequire — inclusion stricte
\n\nrequire fait la même chose, mais avec une différence : si le fichier n'est pas trouvé, PHP émet une Fatal Error (erreur fatale) et arrête immédiatement le script.
<?php\n// require.php\necho "Ceci est un require. ";\nrequire 'fichier_inexistant.php'; // Déclenche une Fatal Error\necho "Ce code ne sera jamais exécuté !";\n?>\n\n\nRésultat :
\nCeci est un require. Fatal error: Uncaught Error: Failed opening required 'fichier_inexistant.php'...\n\nLe script est mort. Point final. Plus rien ne s'exécute.
\n\nQuand utiliser quoi ?
\n- \n
- require — pour les fichiers critiques : configuration de la base de données, classes principales, routeur. S'ils sont absents, le site ne peut pas fonctionner. \n
- include — pour les blocs optionnels : templates, widgets, bannières publicitaires. Si le fichier n'est pas inclus, la page s'affiche simplement sans ce bloc. \n
3. require_once et include_once : protection contre la duplication
\n\nImaginez maintenant une situation. Vous avez un fichier config.php qui déclare des constantes et des fonctions. Vous l'incluez dans plusieurs fichiers. Si vous l'incluez deux fois, PHP va tenter de redéclarer les constantes et fonctions, ce qui provoquera une erreur fatale. C'est là que require_once et include_once entrent en jeu : ils vérifient si le fichier a déjà été inclus et, si c'est le cas, ne l'incluent pas une seconde fois.
<?php\n// config.php\ndefine('SITE_NAME', 'MonSite');\n\n// page.php\nrequire_once 'config.php';\nrequire_once 'config.php'; // Ignoré, déjà inclus\necho SITE_NAME; // Affiche 'MonSite'\n?>\n\n\nRésultat :
\nMonSite\n\nSans _once, la deuxième inclusion aurait provoqué une erreur fatale : Cannot redeclare constant SITE_NAME.
Quand utiliser _once ?
\n- \n
- require_once — pour les fichiers qui définissent des classes, des fonctions ou des constantes. Vous voulez être sûr qu'ils ne sont inclus qu'une seule fois. \n
- include_once — pour les fichiers optionnels qui pourraient être inclus plusieurs fois par inadvertance (par exemple, dans une boucle). \n
4. Tableau récapitulatif des différences
\n\n| Fonction | \nComportement en cas d'erreur | \nVérification d'inclusion unique | \nCas d'utilisation typique | \n
|---|---|---|---|
include | \n Warning, le script continue | \nNon | \nWidgets, templates optionnels | \n
require | \n Fatal Error, le script s'arrête | \nNon | \nConfiguration, classes essentielles | \n
include_once | \n Warning, le script continue | \nOui | \nFichiers optionnels inclus potentiellement plusieurs fois | \n
require_once | \n Fatal Error, le script s'arrête | \nOui | \nFichiers critiques avec définitions uniques | \n
5. Bonnes pratiques et pièges à éviter
\n\nVoici quelques conseils pour utiliser ces fonctions comme un pro :
\n\n- \n
- Utilisez toujours require_once pour les fichiers de configuration et de classes — cela évite les erreurs de redéclaration et garantit que tout est bien chargé. \n
- Réservez include pour les contenus optionnels — comme les publicités ou les widgets non essentiels. \n
- Évitez d'utiliser include pour des fichiers critiques — si le fichier est manquant, vous risquez de vous retrouver avec une page cassée sans message d'erreur clair. \n
- Utilisez des chemins absolus ou relatifs explicites — évitez les chemins relatifs ambigus qui peuvent causer des erreurs difficiles à déboguer. \n
- Organisez vos fichiers avec une structure claire — par exemple, un dossier
includes/pour les fichiers réutilisables. \n
Conclusion
\n\nMaintenant, vous savez tout sur require, include, require_once et include_once en PHP. Retenez l'essentiel : require pour les fichiers critiques, include pour les options, et _once pour éviter les doublons. Avec ces bases solides, vous éviterez les erreurs fatales et écrirez un code PHP plus propre et plus fiable.
Et vous, quelle fonction utilisez-vous le plus souvent ? Partagez votre expérience dans les commentaires !