PHP la fonction Include (fichier)

PHP cours tutorial

PHP la fonction Include



Si vous avez une portion de code php que vous insérer dans un certain nombre de pages de votre site par exemple la tête de la page ou le menu général de votre site.
Vous n’allez pas écrire cette portion de code pour chaque page ou à chaque fois vous coupiez et coller le code .
Non il suffit d’écrire ce code une fois dans un fichier spécifique et l’insérer dans vos page quand vous le voulez grasse à la fonction include() de php.
Cette fonction insére le contenu d'un fichier PHP dans un autre fichier PHP avant que le serveur l'exécute.
Deux fonctions sont disponible dans PHP pour faire ce travail

La fonction PHP include()
La fonction PHP require()

Ces deux fonctions font le même travail.

La fonction PHP include()


La fonction include() prend tout le contenu d’un fichier php spécifique et l'inclut dans le fichier courant.
Si une erreur se produit, la fonction d'inclusion () produit un avertissement, mais l'exécution du code continuera.
Exemple 1
Supposez que vous avez un dossier d'en-tête standard, appelé le « header.php ».
Pour inclure le dossier d'en-tête dans une page, employez la fonction d'inclusion include() :

Sélectionner le code

<html>
<body>

<?php include("header.php"); ?>
<h1>Page d’accueil </h1>
<p>Bonjour c’est la page d’accueil de mon site merci pour la visite</p>

</body>
</html>

 

Exemple 2
Supposez que nous avons un dossier standard de menu, qui devrait être employé sur toutes les pages.
Nous allons créer un fichier menu.php dont voici le code :

Sélectionner le code

<ul><li><a href="/default.php">Accueil</a></li>
       <li><a href="/tutorials.php">tutoriaux</a></li>
        <li><a href="/references.php">Références</a></li>
        <li><a href="/examples.php">Exemples</a> </li>
        <li><a href="/about.php">Qui suis-je ?</a> </li>
       <li> <a href="/contact.php">Contact </a></li> 
</ul>

 

Toutes les pages dans le site Web devraient inclure ce fichier de menu. Voici comment il peut être fait :

Sélectionner le code

<html>
<body>

<div class="leftmenu">
<?php include("menu.php"); ?>
</div>

<h1>Bien venu sur mon site.</h1>
<p>texte texte</p>

</body>
</html>

 


Si vous regardez le code source de la page dont le le code ci-dessus (dans un navigateur), elle ressemblera à ceci :

Sélectionner le code

<html>
<body>

<div class="leftmenu">
<ul><li><a href="/default.php">Accueil</a></li>
       <li><a href="/tutorials.php">tutoriaux</a></li>
        <li><a href="/references.php">Références</a></li>
        <li><a href="/examples.php">Exemples</a> </li>
        <li><a href="/about.php">Qui suis-je ?</a> </li>
       <li> <a href="/contact.php">Contact </a></li> 
</ul>
</div>

<h1>Bien venu sur mon site.</h1>
<p>texte texte</p>

</body>
</html>

 

La fonction PHP require()


La fonction php require() est identique à include(), sauf qu'elle manipule les erreurs différemment.
Si une erreur se produit, la fonction include() produira un avertissement, mais le code continuera l'exécution.
require() produira une erreur bloquante, et le code s'arrêtera.
Exemple d'erreur de la fonction include()
Testez ce code sans créer de le fichier fichier.php

Sélectionner le code

<html>
<body>

<?php
include("Fichier.php");
echo "Bonjour le monde !";
?>

</body>
</html>

 

Message d'erreur :

Warning: include(fichier.php) [function.include]:
failed to open stream:
No such file or directory in C:\home\website\fichier.php on line 5

Bonjour monde !
Notez que le rapport d'écho est exécuté ! C'est parce qu'un avertissement n'arrête pas l'exécution de code.
exemple d'erreur de la fonction require()
Maintenant, reprenons le même exemple avec la fonction require().

Sélectionner le code

<html>
<body>

<?php
require("Fichier.php");
echo "Bonjour le monde !";
?>

</body>
</html>

 

Message d'erreur :

Warning: require(ficher.php) [function.require]:
failed to open stream:
No such file or directory in C:\home\website\fichier.php on line 5

Le code echo n'est pas exécuté, parce que l'exécution du code s'est arrêtée après l'erreur bloquante.
Employer la fonction require() au lieu de include(), si vous voulez que les codes ne devraient pas continuer après une erreur.

Un exercice pratique :

Nous allons créer un site avec PHP.
Dans notre site nous allons avoir des pages PHP qui contiennent toutes :
-Un entête avec le titre du site.
-un menu placé à gauche.
-un corps avec le contenu de notre site pour chaque page.
-un pied de page.
En HTML aprés la doctype tout ça se trouve entre <html> et </html>
si vous ne savez pas faire ça je vous invite à voir le cours en html ICI
Le code est le suivant :
Code html :

Sélectionner le code


<!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">
<head>
	<title> titre du site </title>	
	<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"/>
	<link rel="stylesheet" media="screen" 	type="text/css"title="style"href="style.css"/>

</head>
<body>
	<div id="entete"> <!-- entête de la page -->
		<h1>titre du site</h1>	
	</div>
	<div id="menu"><!--menu -->

		<div class="element_menu">
			<a href="page1.html">Menu 1</a><br/>
		</div>
		<div class="element_menu">
			<a href="page2.html">Menu 2</a><br/>

		</div>
		<div class="element_menu">
			<a href="page3.html">Menu 3</a><br/>
		</div>
	</div>

	<div id="corps"> <!-- corps de la page -->
		<h2>titre de la page</h2>
		<p> contenu de la page, contenu de la page, contenu de la page,
			contenu de la page, contenu de la page, contenu de la page,
		</p>
	</div>

	<div id="bas"> <!-- pied de la page -->
		<p> contenue du pied dela page </p>	
	</div>
</body>
</html>


 

Le code css qui va avec :

Sélectionner le code

body
{
   width:770px;
   margin:auto; /* Pour centrer notre page */
   margin-top:20px; /* Pour éviter de coller avec le haut de la fenêtre du navigateur.  */
   margin-bottom:20px;    /* aussi pour le bas du navigateur */
   background-color: #CCCCCC; /* Un fond pour éviter d'avoir un fond blanc  */
   color:#000000;
}

#entete /*entête*/
{
   width:770px;
   height:100px;
   margin-bottom: 10px;
   border: 1px solid black;
   background-color:#333399;
   color: #FFFFFF;
  
}

/* Le corps de la page */

#corps /*corps*/
{
   margin-left: 154px;
   margin-bottom: 5px;
   padding: 10px; 
   margin-right: 1px;
   color: #FFFFFF;
   background-color: #524222;
   border: 1px solid #FFFFFF;
}
#menu /*menu*/
{
   width:140px; /* Il est important de donner une taille au menu */
    border: 1px solid #FFFFFF;
	margin-top: 0px;
	float:left; /* Le menu flottera à gauche vous pouvez mettre float:right   */
	padding: 5px;
}
#bas /*pied de page*/
{
   height:80px;
   padding: 5px;
   margin-bottom: 5px;
   margin-top: 5px;
   text-align: center;
   color: #B3B3B3;
   background-color: #525262;
   border: 1px solid #FFFFFF;
}
.element_menu
{
   color: #00FFFF;
   border: 2px solid black;
   margin-bottom: 5px; /* Pour éviter que les éléments du menu ne soient trop collés */
}
h1
{
text-align: center;
color: #00CCFF
}
h2
{
text-align: center;
color: #FF00FF
}

 

Exécutez ce code

Maintenant nous allons reprendre ce code mais en PHP.
En effet il existe deux méthodes pour le faire chacune avec ses avantages et inconvénients.

Méthode 1



La première méthode a l’avantage d’assurer une meilleur sécurité contre le hacker.
Son inconvénient est d’être moins pro, surtout si on veut changer toute l’apparence du site, mais je croix qu’on utilisant les feuilles de style ce problème devient minime.
Dans cette méthode nous découpons le code html précédent en trois parties et donc créer trois pages PHP
comme suit :
Code page « haut.php » :

Sélectionner le code

<!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">
<head>
	<title> titre du site </title>	
	<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"/>

	<link rel="stylesheet" media="screen" type="text/css"title="style"href="style.css"/>
</head>
<body>
	<div id="entete"> <!-- entête de la page -->
		<h1>titre du site</h1>	
	</div>

	<div id="menu"><!--menu -->
		<div class="element_menu">
			<a href="page1.php">Menu 1</a><br/>
		</div>
		<div class="element_menu">

			<a href="page2.phpl">Menu 2</a><br/>
		</div>
		<div class="element_menu">
			<a href="page3.php">Menu 3</a><br/>

		</div>
	</div>

 


Code page «pied.php » :

Sélectionner le code

<div id="bas"> <!-- pied de la page -->
		<p> contenue du pied de la page </p>	
	</div>

</body>
</html>

 


et en fin code de la page « corps.php » :

Sélectionner le code

<?php include("haut.php"); ?>

<div id="corps"> <!-- corps de la page -->
		<h2>titre de la page</h2>

		<p> 	Contenu de la page, contenu de la page, contenu de la page.
			Contenu de la page, contenu de la page, contenu de la page.
		</p>
</div>
<?php include("pied.php"); ?>

 


Vous pouvez nommer vos pages comme vous voulez pas nécessairement haut pied corps.

Méthode 2



La deuxième méthode , a comme avantage la possibilité de changer toute l’apparence du site en un coup.
Mais elle a le grand problème de la sécurité et il faut faire très attention à votre code, si non votre site sera très vulnérable au hack.
Le fonctionnement est l’inverse de la première méthode, c'est-à-dire qu’au lieu d’inclure l’entête et le pied de page. On crée une page qui contient tout sauf le corps et dans cette page on incluse le corps.

Le code est le suivant :
Page entière sans le corps « page.php ».
Code de « page.php » :

Sélectionner le code

<!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">

<head>
	<title> titre du site </title>	
	<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"/>
	<link rel="stylesheet" media="screen" 	type="text/css"title="style"href="style.css"/>
</head>
<body>

	<div id="entete"> <!-- entête de la page -->
		<h1>titre du site</h1>	
	</div>
	<div id="menu"><!--menu -->
		<div class="element_menu">

			<a href="page1.php">Menu 1</a><br/>
		</div>
		<div class="element_menu">
			<a href="page2.php">Menu 2</a><br/>

		</div>
		<div class="element_menu">
			<a href="page3.php">Menu 3</a><br/>
		</div>
	</div>

	<?php include("corps.php"); ?>


	<div id="bas"> <!-- pied de la page -->
		<p> contenue du pied dela page </p>	
	</div>

</body>
</html>

 


Comme vos le constatez cette page contient tout l’entête, le menu, etc. …
Et on crée la page « corps.php » comme ceci.
Code de corps.php :

Sélectionner le code

<div id="corps"> <!-- corps de la page -->
		<h2>titre de la page</h2>
		<p> Contenu de la page, contenu de la page, contenu de la page.
			Contenu de la page, contenu de la page, contenu de la page.
		</p>

</div>

 


la page « corps.php » peut être tout ce que vous voulez ( un texte, un forum, un livre d’or etc… ).
En réalité le vrai code est un peu différent.
On va mettre une variable qui s’occupe de récupérer l’url de la page à inclure selon la demande du visiteur.
Le code est le suivant :
Code PHP

Sélectionner le code

<!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">
<head>
	<title> titre du site </title>	
	<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"/>

	<link rel="stylesheet" media="screen" 	type="text/css"title="style"href="style.css"/>
</head>
<body>
	<div id="entete"> <!-- entête de la page -->
		<h1>titre du site</h1>	
	</div>

	<div id="menu"><!--menu -->
		<div class="element_menu">
			<a href="page1.php">Menu 1</a><br/>
		</div>
		<div class="element_menu">

			<a href="page2.php">Menu 2</a><br/>
		</div>
		<div class="element_menu">
			<a href="page3.php">Menu 3</a><br/>

		</div>
	</div>

	<?php
    $page = $_GET['page'];
    include("$page.php");
    ?> 

	<div id="bas"> <!-- pied de la page -->
		<p> contenue du pied dela page </p>	
	</div>

</body>
</html>

 


Si le visiteur clique sur le menu par exemple news sur votre page index alors l’url contient index.php?page=news et donc on inclura la page « news.php ».
Et si un hacker change votre url il peut facilement changer le contenu de votre page et de là récupérer toutes les données de votre site s’il le veut.
Il existe des solutions à ce problème de sécurité voilà une.
On utilise une boucle if :
Code PHP :

Sélectionner le code

<!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">
<head>
	<title> titre du site </title>	
	<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"/>

	<link rel="stylesheet" media="screen" 	type="text/css"title="style"href="style.css"/>
</head>
<body>
	<div id="entete"> <!-- entête de la page -->
		<h1>titre du site</h1>	
	</div>

	<div id="menu"><!--menu -->
		<div class="element_menu">
			<a href="page1.php">Menu 1</a><br/>
		</div>
		<div class="element_menu">

			<a href="page2.php">Menu 2</a><br/>
		</div>
		<div class="element_menu">
			<a href="page3.php">Menu 3</a><br/>

		</div>
	</div>

	<?php
    if ($_GET['page'] == "menu1")
    {
        include("menu1.php");
    }
    
    if ($_GET['page'] == "menue2")
    {
        include("menu2.php");
    }
    
    if ($_GET['page'] == "menu3")
    {
        include("menu3.php");
    }
    
    ?>


	<div id="bas"> <!-- pied de la page -->

		<p> contenue du pied dela page </p>	
	</div>
</body>
</html>


	<div id="bas"> <!-- pied de la page -->

		<p> contenue du pied dela page </p>	
	</div>
</body>
</html>

 


Là si un hacker tente de changer l'url, aucun des if ne sera valable donc rien ne sera inclus.



Par carabde 20 Aout 2014