Accueil > Développement > Programmation > Include ou require ?

Include ou require ?

Un include qui requiert votre attention.

lundi 14 août 2006, par Prélude

Vous venez de terminer votre site et il est beau, très beau. Il contient à peu près 30 pages et vous en avez sué pour en arriver là.
Et puis, un ami passe par là et vous fait remarquer, très gentiment, qu’il n’y a pas de "contact" dans le menu de vos pages.
Bon, vous piquez une crise à l’idée de refaire les 30 pages juste parce que vous avez oublié une ligne dans le menu. La crise passée et quelques heures plus tard, ce même ami vous fait remarquer que votre menu n’est pas franchement joli et que ce serait mieux de tenter le coup avec une autre couleur... Et là, il hésite sur la couleur. Mais vous non ! Ce sera ma main dans la figure et puis c’est tout !

Bon, avant d’en arriver là, il serait bon de mettre en place ces fameux fichiers inclus.
En effet, un site internet est un objet éphémère, qui bouge, qui vie et qui change donc régulièrement. Si vous ne concevez pas vos pages avec un minimum de méthode, vous ne vous en sortirez pas. Alors, avant de lancer votre main sur la figure de votre ami, placez vos menus dans un fichier inclus.

include

Cette commande Php est simple à utiliser :

<?php
include "mon_fichier.php";
?>

Ce morceau de code permet tout simplement de placer (d’inclure) le fichier "mon_fichier.php" à la place de cette ligne.
Imaginons que votre menu soit le suivant :

Fichier : menu.php
<ul>
        <li><a href="index.php">Sommaire</a></li>
        <li><a href="forum.php">Forum</a></li>
<ul>

Vous pouvez placer dans le fichier d’index la ligne suivante en lieu et place du menu :

<?php
include "menu.php";
?>

Et ceci sur toutes les pages de votre site où doit s’afficher votre menu.
Maintenant, si votre ami passe par là et vous propose une petite modification, vous pouvez lui dire "ok, dans 10 secondes, elle est faite". Et vous n’avez qu’à modifier le fichier "menu.php".

Quelques règles tout de même

Vous pouvez très bien placer du php dans le fichier inclus. Vous pouvez, par exemple, définir que le menu en cours n’est pas cliquable.

Il est de bon goût d’inclure un fichier de configuration au début de toutes vos pages Php. Ce fichier contient les paramètres de votre site, mais peu aussi contenir des fonctions que vous utilisez régulièrement. Vous pouvez aussi inclure 2 fichiers, l’un pour la configuration et l’autre pour les fonctions.

N’hésitez pas à nommer vos fichiers avec l’extension ".inc.php" afin de les reconnaître plus facilement. Il est bon également de les placer dans un dossier. Moins il y aura de fichiers à la racine de votre site et plus votre site sera simple à maintenir, sans compter que cela déchargera aussi votre serveur.

Ne tentez pas le diable en essayant d’inclure un fichier dont le nom est indiqué par une variable :

<?php
include $fichier;
?>

C’est une piste que les pirates aiment bien. On ne va pas rentrer dans les détails, mais sachez que c’est une porte ouverte. Si toutefois vous tenez absolument à faire un include avec une variable, vérifiez et revérifier avec des tests que la page que vous allez charger soit bien une page à vous, se trouvant sur votre serveur.

Et require alors ?

Php nous propose une autre fonction pour inclure un fichier : require

Avec require, un fichier ne sera inclus qu’une seule fois dans un autre. Par exemple, dans une boucle, un fichier include sera inclus autant de fois que la boucle tournera alors qu’une fichier chargé avec require ne sera chargé que la première fois.

require fonctionne de la même façon que include d’un point de vue syntaxique.

Mon site en morceau

Si vous souhaitez maintenir un site très facilement, faites en sorte de regrouper tous ce qui peut être regrouper et de les inclure dans vos pages à l’aide de require ou include.
Par exemple, les entêtes des pages html peuvent être mis dans un fichier "entete.php".

Un peu plus loin

Il est tout à fait possible d’appeler un fichier distant et de lui passer des paramètres.
L’appel suivant fonctionne très bien :

<?php
include "http://www.mon-domaine.fr/mon_fichier.php?toto=1&titi=2;"
?>

Par contre, pour un fichier en local, ce n’est pas pareil. L’appel suivant ne fonctionnera pas :

<?php
//--- ceci n'est pas correct
include "mon-fichier.php?toto=1&titi=2";
?>

En effet, il faut faire comme cela :

<?php
//----- ceci est correct
$toto = 1;
$titi = 2;
include "mon-fichier.php";
?>

Tout simplement.

Messages

  • Une petite précision sur include & require.

    Avec require, un fichier ne sera inclus qu’une seule fois dans un autre.


    Ce n’est pas vraiment le cas. Include et Require fonctionnent de la même manière sauf dans le traitment des erreurs.
    Include renvoie un Warning si le fichier n’existe pas alors que Require fait une erreur fatale.

    Pour inclure un fichier une seule fois, il est plutôt recommandé d’employer include_once() et require_once(). Ces commandes fonctionnent comme include() et require() mais s’assurent en plus que le ficher appelé ne sera inclut qu’une seule fois par page. Ceci évitera sans doute les erreurs de redéfinition de variables ou de fonction.

    • Voulant gerer des URLs identiques sur plusieurs sites, j’aurai besoin d’utiliser la fonction include ou require vers un site distant comme dans l’exemple cidessous :
      Code :

      <?php require 'http://www.monsite.fr/admin/lien.php'; ?>

      Ainsi, chaque modification enregistré sur mon fichier lien.php sera effectif sur chacun de mes sites.

      Je rappel que mes sites sont situés dans des adresses differentes.
      Exemple : http://www.siteperso.fr ; http://www.mapage.fr ; http://www.jesuisici.fr ; ect... etc...

      Le but d’utiliser la fonction include ou require vers un site distant est justement pour ne pas à avoir à répéter les modifications de ma page lien.php sur chacun de mes sites.

      Mais évidament, ca ne marche donc comment faire ???

      Merci pour votre aide

    • Il y a une possibilité, mais qui s’écarte un peu de la thématique : le chargement de la page en question à l’aide de la fonction "join" par exemple. Tout dépend du contenu de la page évidement.