Le point sur la fonction PHP include
Suite à un billet récent où l'on m'a présenté un code HTML complètement désorganisé et comportant plusieurs entêtes (<head></head>), plusieurs déclarations de document (<html></html>) et plusieurs corps de page (<body></body>), j'ai décidé de faire un rapide point sur l'include en PHP et ses mises en garde.
Comprendre le fonctionnement de l’include()
Il est important d’appréhender le mécanisme de la fonction. Cela permettra, par la suite, d’éviter un certain nombre d’erreurs dues à sa mauvaise compréhension.
L’utilisation d’un include() revient à faire un simple copié-collé : le code du fichier appelé est inséré à l’intérieur de la page appelante, à l’endroit exact où se trouve la fonction. Elle peut être placée n’importe où, à l’intérieur du code source : entre les balises <head> et </head> ou <body> et </body>, par exemple.
Le navigateur ne visualisera qu’un seul et même document avec, en lieu et place de votre include(), le contenu du fichier inclus.
Afin d’éviter toute erreur, il est préférable d’utiliser des adresses (URLs) absolues, avec le chemin complet par rapport à la racine du site. Si le fichier inclus comporte des liens, ceux-ci pointeront toujours d’après l’adresse de la page appelante. Par conséquent, il suffit qu’un même fichier soit inclus dans des pages de niveaux différents (ex : /fruits/ et /fruits/pommes/ ) pour que les adresses relatives deviennent obsolètes.
Par exemple, pour atteindre un fichier situé dans le dossier fruits, nous préférerons l’écriture absolue <a href="/fruits/kiwi.php">page des kiwis</a> à l’écriture relative <a href="fruits/kiwi.php">page des kiwis</a>. Le / précédant l’url indique au navigateur de prendre pour point de départ la racine du site.
Le fichier inclus peut être de n’importe quel type (HTML, JavaScript, PHP, Texte…) et avoir n’importe quelle extension (.htm, .php, .tpl, .kiwi, …) : seul le contenu du fichier importe réellement. Il n’est pas à considérer comme une page à part entière : il n’a pas pour vocation d’être visualisé en tant que tel. L’utilisation d’une extension spécifique significative (comme par exemple .inc.php -pour include-) permet d’avoir une meilleure visibilité et d’éviter ainsi quelques erreurs.
Pour éviter toute faille de sécurité, nous préférerons utiliser une extension .php afin que le fichier soit automatiquement interprété et sa source non visualisable dans le navigateur. Toute autre extension permettrait à quiconque d’avoir accès au contenu du fichier, ce qui pourrait se révéler problématique s’il contenait des données confidentielles, comme par exemple des informations de connexion à mysql.
Enfin, n’oubliez pas qu’un include() est une fonction php. Il est donc impératif que l’extension de votre page appelante soit de type php.
Exemple d’utilisation
Nous allons inclure les fichiers titre.inc.php et contenu.inc.php à l’intérieur de la page test.php. Ci-dessous, le contenu des trois fichiers :
Alsacréations vous conseille de manger des kiwis.contenu.inc.php
Mangez des kiwis, ça vous réussit… Mais rassurez-vous, une pomme, ça va aussi !test.php
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
xml:lang="fr" lang="fr">
<head>
<title><?php include('titre.inc.php'); ?></title>
</head><body>
<h1><?php include('contenu.inc.php'); ?></h1>
</body>
</html>
Au final, le navigateur visualisera test.php comme ceci :
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr"> <head> <title>Alsacréations vous conseille de manger des kiwis.</title> </head><body> <h1>Mangez des kiwis, ça vous réussit… Mais rassurez-vous, une pomme, ça va aussi !</h1> </body> </html>
Erreur courante
L’erreur la plus classique est l’amalgame qui est fait entre l’utilisation de frames ou d’iframes et d’include(). Là où les frames et autres iframes simulent l’insertion d’une page à l’intérieur d’une autre grâce au navigateur, la fonction include() injecte réellement la totalité du fichier, du côté du serveur web.
Un cas typique : l’insertion d’une page complète au moyen d’un include().
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr"> <head> <title></title> </head><body> <h1>Mangez des kiwis, ça vous réussit… Mais rassurez-vous, une pomme, ça va aussi !</h1> </body> </html>test.php
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
xml:lang="fr" lang="fr">
<head>
<title>Alsacréations vous conseille de manger des kiwis.</title>
</head><body>
<h1><?php include('page_htm_a_inserer.htm'); ?></h1>
</body>
</html>
Au final, le navigateur visualisera test.php comme ceci :
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr"> <head> <title>Alsacréations vous conseille de manger des kiwis.</title> </head><body> <h1><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr"> <head> <title></title> </head><body> <h1>Mangez des kiwis, ça vous réussit… Mais rassurez-vous, une pomme, ça va aussi !</h1> </body> </html></h1> </body> </html>
Comme vous pouvez le constater, la totalité du code de la page page_htm_a_inserer.htm à été inclus dans notre page test.php.
Il en résulte une imbriquation de deux structures HTML complètes. La page est totalement incohérente et n’a aucune chance d’être interprétée correctement par les navigateurs.
Pour en savoir plus et pour mettre ces informations en pratique, suivez le tutoriel complet : "Inclure un fichier dans un autre grâce à PHP"
Par Raphael GOETTER - dimanche 29 mai 2005 à 20:15
Astuces - #156 - Lu 92902 fois - Intérêt du billet: 2.61(150) - Fil RSS








Trackbacks
Le lundi 30 mai 2005 à 20:43, de akka blog :: #
Le mardi 7 juin 2005 à 22:02, de castanos.org :: #
Les trackbacks pour ce billet sont fermés.
Evaluez ce billet
Commentaires
Le dimanche 29 mai 2005 à 21:31, par pickupjojo :: site :: #
Le dimanche 29 mai 2005 à 21:49, par shadow84 :: #
Le dimanche 29 mai 2005 à 21:56, par Raphael :: site :: #
Le dimanche 29 mai 2005 à 22:54, par solo :: site :: #
Le lundi 30 mai 2005 à 02:49, par Merkel :: #
Le lundi 30 mai 2005 à 02:51, par Merkel :: #
Le lundi 30 mai 2005 à 08:00, par clb56 :: site :: #
Le lundi 30 mai 2005 à 09:38, par solo :: site :: #
Le lundi 30 mai 2005 à 09:56, par Raphael :: site :: #
Le lundi 30 mai 2005 à 11:48, par Bruno :: site :: #
Le lundi 30 mai 2005 à 14:06, par Merkel :: #
Le lundi 30 mai 2005 à 16:15, par Nyro Xeo :: #
Le mardi 31 mai 2005 à 01:03, par shadow84 :: #
Le mardi 31 mai 2005 à 06:23, par jb_gfx :: #
Le mardi 31 mai 2005 à 10:25, par clb56 :: #
Le mardi 31 mai 2005 à 12:26, par martin© :: #
Le mardi 31 mai 2005 à 13:37, par Raphael :: site :: #
Le mardi 31 mai 2005 à 21:14, par jcm :: #
Le mardi 7 juin 2005 à 19:53, par bastien :: site :: #
Le vendredi 10 juin 2005 à 01:59, par mike72 :: #
Le vendredi 10 juin 2005 à 09:31, par Raphael :: site :: #
Le mardi 21 juin 2005 à 13:37, par gimli :: site :: #
Le jeudi 23 juin 2005 à 10:40, par asene :: #
Ajouter un commentaire
Les commentaires pour ce billet sont fermés.