Le 18 Décembre 2015

Importation de fichier avec include et require

Pour l’importation de vos fichiers (HTML, PHP ou text) PHP propose 2 structures : include et require ainsi que leur variante avec _once. Nous allons examiner chacune d’entre elle, avec leur comportement et leur spécificité et les tester afin de décider laquelle choisir selon la situation.

Commençons par les découvrir :

include
Cette fonction inclut et exécute le fichier demandé. Elle renvoie une erreur de type warning si elle ne trouve le fichier. Elle autorise l’inclusion du même fichier plusieurs fois.

include_once
Elle est similaire à la précédente, mais elle vérifie que le même fichier n’a pas déjà été inclus. C’est donc une garantie d’inclure le fichier qu’une seule fois dans votre code.

require
Elle est identique à include, la différence étant que si une erreur est constatée (fichier introuvable par exemple) elle provoque une Erreur fatale et arrête le script en cours. Cela peut être intéressant dans un contexte de sécurisation du code à renvoyer.

require_once
Similaire à require mais vérifie aussi que le même fichier n’a pas déjà été inclus.

Mise en pratique de chaque instruction afin de d’observer le comportement

Nous allons commencer par tester les variantes sans provoquer d’erreur. Voici le code de test, une simple boucle qui est sensée inclure 3 fois le même fichier ainsi qu’un message de fin de script témoignant que le script est arrivé à terme.

PHP

for($i=0 ; $i<3 ; $i++){
  include 'inc.html';
}
-- FIN DU SCRIPT --

Tests d' importation sans provoquer d'erreur :

Avec l'instruction INCLUDE nous constatons que le fichier est inclus plusieurs fois...

-- Page de test avec INCLUDE --


Avec l'instruction INCLUDE_ONCE le fichier est bien inclus qu'une seule fois malgrés qu'il soit appelé plusieurs fois dans notre boucle de test.

-- Page de test avec INCLUDE_ONCE --


Avec l'instruction REQUIRE nous constatons que le fichier est inclus plusieurs fois, le résultat est donc le même qu'avec INCLUDE.

-- Page de test avec REQUIRE --


Avec l'instruction REQUIRE_ONCE le fichier est la ausi bien inclus 1 seule fois malgrés qu'il soit appelé plusieurs fois dans notre boucle de test.

-- Page de test avec REQUIRE_ONCE --


Tests d' importation d'un fichier introuvable provoquant une erreur :

Maintenant nous utilisons le même code mais en demandant un fichier introuvable afin de visualiser le comportement de chaque instruction. Nous constatons aussi l’absence du message de fin de script dans selon la méthode utilisée, celui-ci n’étant pas interprété à cause d’une erreur fatale qui arrête le script.


Avec l'instruction INCLUDE une erreur de type WARNING est retournée à chaque inclusion...

-- Page de test avec INCLUDE --


Avec l'instruction INCLUDE_ONCE une erreur de type WARNING est la aussi retournée à chaque inclusion. Notez que même si include_once garantie l'unicité de l'inclusion (1 seule fois) il retourne autant de fois le message d'erreur que d'appels.

-- Page de test avec INCLUDE_ONCE --


Avec l'instruction REQUIRE un WARNING nous informe la aussi que le fichier n'a pas été trouvé. Une ERREUR FATALE est provoquée et arrête le script en cours dés le 1er appel. Le script arrêté par l'erreur fatale empêche bien l'affichage du message de fin de script.

-- Page de test avec REQUIRE --


Avec l'instruction REQUIRE_ONCE un WARNING nous informe la aussi que le fichier n'a pas été trouvé. Une ERREUR FATALE est provoquée et arrête le script en cours dés le 1er appel. Le script arrêté par l'erreur fatale empêche bien l'affichage du message de fin de script. Le comportement est donc identique à REQUIRE en cas d'erreur puisqu'il évalue et garantie l'unicité.

-- Page de test avec REQUIRE_ONCE --

Conclusion des tests...

En cas de fichier introuvable, include provoque simplement un warning mais continue le script. Au contraire require lève une erreur fatale qui stoppe net le script, ce que nous constatons avec l’absence du message – fin de script – lors des tests.

Vous pouvez maintenant décider en connaissance de cause quelle structure choisir selon le contexte et le niveau de sécurité pour importer vos fichiers…