PHP : require, require_once, include, include_once

PHP offre différents moyens d'inclure des fichiers dans un script permettant de générer une page Web : require, require_once, include, include_once. Ceci permet notamment d'éviter de recopier dans chaque page le code qui génère les différentes parties communes comme l'entête et le pied de page. On pourra également inclure des fichiers contenant du code qui n'est pas destiné à générer du code HTML, comme le branchement à la base de données ou une bibliothèque de fonctions PHP.

Cet article vous présente les différences entre ces quatre instructions.

▼Publicité

require vs include

À prime abord, on note que parmi ces quatre instructions se dégagent deux familles : la famille require et la famille include. Les deux permettent d'effectuer la même tâche : inclure un fichier. Ce n'est que dans le cas où le fichier ne peut pas être inclus que le traitement sera différent.

Avec la famille require, que ce soit require ou require_once, si le fichier ne peut pas être inclus, une erreur fatale de niveau E_COMPILE_ERROR sera produite, ce qui mettra fin au script PHP.

Avec la famille include, que ce soit include ou include_once, si le ficher ne peut pas être inclus, PHP ne générera qu'une alerte de niveau E_WARNING. Le script PHP pourra donc continuer.

Donc, on utilisera la famille require lorsque la page Web a absolument besoin du fichier à inclure pour fonctionner. Dans les autres cas, on pourra utiliser la famille include.

Dans le reste de cet article, la différence entre une instruction et sa version se terminant par _once est illustrée avec la famille require.

require

L'instruction require ajoute le fichier sans vérifier s'il a déjà été ajouté. Le même fichier pourrait donc être ajouté plus d'une fois si tel était le besoin. 

On utilisera généralement require avec les fichiers portant l'extension .inc., qui contiennent des extraits de pages Web.

Ex :

PHP

require 'include/entete.inc';

require_once

L'instruction require_once, quant à elle, sera utilisée pour ajouter un fichier contenant des fonctions. Comme son nom l'indique, elle assure que si le fichier a déjà été ajouté, il ne sera pas ajouté une deuxième fois.

require_once permet donc d'ajouter une bibliothèque de fonction :

  • dans une page Web

    et/ou

  • dans les fichiers d'entête et de pied de page

et ce, sans que les fonctions contenues dans la bibliothèque soient définies deux fois.

On utilisera généralement require_once avec les fichiers portant l'extension .php.

Ex :

PHP

require_once 'include/mabibliotheque.php';

Exemple concret

Voici un scénario classique où un même fichier .php risquerait d'être inclus plusieurs fois si on utilisait require plutôt que require_once :

  • Dans le fichier entete.inc, on a besoin d'utiliser une fonction de notre bibliothèque de fonctions. Ce fichier débutera donc par une instruction permettant d'inclure cette bibliothèque.
  • Le fichier index.php a lui aussi besoin d'utiliser une fonction de notre bibliothèque. Il commence par inclure la bibliothèque puis, comme il souhaite utiliser toutes les balises communes d'entête, il inclus également entete.inc. Ceci cause une double inclusion de notre bibliothèque de fonctions.

C'est pourquoi les bibliothèques, dont l'extensions est généralement .php, seront incluses à l'aide de l'instruction require_once. On pourra donc les inclure dans chaque fichier qui doit les utiliser sans avoir à vérifier manuellement dans les autres fichiers inclus pour savoir si la bibliothèque en fait déjà partie.

Illustrons cet exemple

Problème avec require

Soit le fichier index.php qui a besoin d'utiliser une fonction déclarée dans notre bibliothèque. Dans le site Web de cet exemple, le fichier entete.inc a lui aussi besoin d'utiliser cette fonction. Chacun s'occupera donc d'inclure mabibliotheque.php.

Problème avec require

Le problème, c'est que lors de l'exécution du code, PHP fera un « copier-coller virtuel », c'est-à-dire que ce sera comme s'il remplaçait l'instruction require par le code du fichier inclus. On voit donc que la fonction mafonction() est définie deux fois, ce qui causera une erreur de compilation.

Problème avec require

Solution avec require_once

Le problème peut être résolu avec require_once.

Solution avec require_once

Grâce à require_once, PHP effectuera une vérification supplémentaire avant d'inclure la bibliothèque. Ainsi, lors de son « copier-coller virtuel », PHP détectera que la bibliothèque de fonction a déjà été incluse alors il ne l'inclura pas une seconde fois.

Solution avec require_once

Merci de partager ! Share on FacebookTweet about this on TwitterShare on Google+Share on LinkedInPin on PinterestShare on StumbleUponEmail this to someone
Catégories