Inclure des fichiers (include, require)
Comment inclure les fichiers en PHP ?
Dans une programmation en PHP, sans l'inclusion de fichiers on serait obligé de copier coller le même code sur toutes les pages qui nécessitent une instruction identique.
Comme pour les fonctions par exemple, il se peut que vous ayez à utiliser les mêmes fonctions dans des fichiers différents. Vous auriez donc à recopier la définition de chaque fonction en haut de chaque page. Cette méthode rendrait les mises à jour plus difficiles. En effet, ça vous obligerait à parcourir toutes les pages pour modifier les définitions des fonctions.
Ce serait très malheureux de perdre du temps à faire ça alors qu'on a la possibilité de l'éviter en centralisant tout dans un même fichier.
Inclure un fichier avec la fonction include
Supposons que l'on a quelques fonctions sur le calcul des prix. On en aura souvent besoin dans les pages de notre site. On va les regrouper dans un fichier prix.php et on va essayer de l'inclure dans un fichier. Afin d'éviter de trimbaler ces fonctions partout, la fonction include nous servira d'inclusion de fichier.
La fonction en question se remplace elle-même par le contenu du fichier spécifié.
Contenu de prix.php :
<?php function difference($prix1, $prix2) { $resultat=$prix1-$prix2; return $resultat; } function calculttc($prixht,$tva) { $prixttc=$prixht*(1+$tva/100); } function calculht($prixttc,$tva) { $prixht=($prixttc*100)/($tva+100); } function calculremise($pourcentage, $prix) { $remise=$prix*$pourcentage; } ?>
Dans une page catalogue.php, on a par exemple le prix hors taxe au départ. Cependant, on a besoin d'afficher le prix TTC.
Contenu de catalogue.php :
<?php //affichage et calcul prix TTC include ("prix.php"); //inclusion du fichier prix $prixht=100; define(TVA, 19.6); $tva = 19.6; echo "prix ttc:".calculttc($prixht,$tva); echo calculttc($prixht,$tva); ?>
Dans une autre page, facture.php par exemple, on a besoin des différents prix et de calculer aussi la remise.
Contenu de facture.php :
<?php //affichage et calcul de tous les prix include ("prix.php"); $prixht=100; define(TVA, 19.6); $tva = 19.6; $prixttc= calculttc($prixht,TVA); $remise = calculremise(10,$prixht); $apayer= difference($prixttc, $remise); echo "prix ht:".$prixht."<br>"; echo "prix ttc:".$prixttc."<br>"; echo "prix remise 10%:".$remise."<br>"; echo "prix à payer:".$apayer."<br>"; ?>
On 'inclue' le contenu du fichier prix.php dans les autres fichiers, en l'appelant par la fonction 'include', et en lui passant en paramètre le nom du fichier à include (dans l'exemple: prix.php).
Inclure des fichiers avec la fonction Require
L'instruction require fonctionne de la même façon qu'include. Toutefois, il existe une différence entre ces deux méthodes. Lorsque vous tentez d'inclure un fichier avec include, si le fichier n'existe pas, PHP affichera une alerte (warning).
Cela veut dire qu'il va vous signaler tout simplement l'erreur mais il continuera l'exécution du script. A l'inverse, la fonction require génèrera une erreur fatale. Il interrompe votre script en cas d'erreur. En d'autres termes, utilisez require() si vous voulez que votre script soit interrompu en cas d'inclusion manquant.
Exemple : Mélanger XHTML et PHP
On a parlé de page web, catalogue, etc mais jusqu'à présent nous n'avons pas trop abordé un sujet important :
Comment mélanger du PHP avec du html ? Voici venu ce moment propice que tout le monde a attendu. En fait, il est bel et bien possible de mettre du XHTML dans du PHP.
C'est d'ailleurs le but ultime de l'application de PHP dans le domaine de web. Pour cette expérience, utilisons 3 fichiers:
Contenu du fichier haut.php :
<table width="500" border="1" bgcolor="#66CCCC"> <tr> <td><?php echo " Menu1"; ?></td> <td><?php echo " Menu2"; ?></td> <td><?php echo " Menu3"; ?></td> <td><?php echo " Menu4"; ?></td> <td><?php echo " Menu5"; ?></td> <td><?php echo " Menu6"; ?></td> </tr> </table>
Contenu du fichier bas.php :
<table width="500" border="1" bgcolor="#FF9900"> <tr> <td><?php echo "Pieds de page"; ?></td> </tr> </table>
Contenu du fichier page1.php :
<html> <head> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /> <title>page</title> </head> <?php require("haut.php"); ?> <table width="500" height="500" border="1" > <tr align="center"> <td> <?php echo "contenu php"; ?> </td> </tr> </table> <?php require("bas.php"); ?> </html>
Bien sûr, notre page a encore besoin d'une retouche. Néanmoins, la base est déjà là. Ce qui est intéressant c'est que là encore on a bien vu l'intérêt des inclusions de fichier.
En effet, le haut et le bas de page ne changent pas lors de la navigation. Toutes les pages n'ont peut être pas les mêmes contenus, mais le haut et le bas de page restent les mêmes quelque soit la page.
Dans ce cas, il suffit d'inclure le fichier haut.php, et le fichier bas.php dans toutes les pages. S'il y a quelque chose à modifier dans le fichier haut.php, on aura juste à toucher un seul fichier, et ceci impactera l'ensemble des pages faisant l'include.
Par conséquent, structurez votre page ainsi vous évitera certains problèmes.
Inclusion avec les fonctions require_once et include_once
Notez bien qu'il y a aussi deux autres fonctions require_once et include_once qui peuvent vous être utiles.
Ce sont les même que require et include mais la différence est qu'elles s'assurent que le fichier qu'on inclue ne l'a pas déjà. Il est conseillé de les utiliser lorsque vous voulez être sûrs que le fichier ne sera inclus qu'une seule fois, notamment pour éviter les déclarations qui engendrent des erreurs.
Un fichier rempli de fonctions, par exemple, ne peut être inclu qu'une seule fois (par exécution). Les fonctions étant déjà déclarées, elle ne peuvent l'être une seconde fois, et cela génèrerait une erreur.