Vous êtes sur la page 1sur 75

GI2 - Programmation Web - cours PHP et MySQL

Mustapha Amrouch
Ecole supérieure de la technologie
Université Ibn Zohr
2015 - 2016

1
Rappel sur les cours précédents(1)

Régles générales et Syntaxe de base de langage


Traitement des formulaires Cou
rs 1
Gestion des fichiers ,2,3
,4 &
POO 5
Bases de données

Cookies & session Cou


rs 6
Gestion emails
Gestion des erreurs

GI2 - Programmation Web avancée - cours PHP et MySQL E.S.T.Agadir


Plan de séance 5

Gestion des cookies

Gestions session
Gestion des emails

gestion des erreurs

Exercices d’applications

GI2 - Programmation Web avancée - cours PHP et MySQL E.S.T.Agadir


Séance 6 Les cookies

Définition
 Un cookie est un petit fichier texte (65 Ko maximum) stocké par le navigateur sur
le disque dur du visiteur du site à la demande de serveur web;

 Sert à sauvegarder plusieurs informations concernant le visiteur et les


réutiliser lors de sa prochaine visite; (se souvenir de nom de l’utilisateur, se
souvenir des informations saisies, faire des statistiques…)
Emplacement des cookies
 Chrome
C:\Documents and Settings\user\Local Settings\Application Data\Google\Chrome\ User Data\Default\Cache
 Internet Explorer
(C:\Users\user\AppData\Local\Microsoft\Windows\Temporary Internet Files);
FireFox
C:\Documents and Settings\(monprofil)\Application Data\Mozilla\Firefox\ Profiles\**.default

Exemples:
– Stockage dans un cookie de nom du visiteur et par la suite, afficher son nom à
chaque fois qu'il se connectera sur le site
(ceci bien sur, s'il n'efface pas les cookies de son disque dur).

Inconvénients : taille limitée et la non confidentialité.

GI2 - Programmation Web avancée - cours PHP et MySQL E.S.T.Agadir


Séance 6 Les cookies

Schématisation d’envoi et réception d’un cookie

GI2 - Programmation Web avancée - cours PHP et MySQL E.S.T.Agadir


Séance 6 Les cookies

Gestion et la manipulation
La manipulation et la gestion des cookies se fait par la fonction setcookies();

setcookie(nom, valeur, expire, chemin, domain, secure, httponly);

 nom : nom du cookie;


 valeur : valeur de cookie, retrouvée par : $_COOKIE[‘nom'];
 expire : Le temps après lequel le cookie expire: time()+durée en secondes;
 chemin : Le chemin sur le serveur sur lequel le cookie sera disponible;
 domain : Le domaine pour lequel le cookie est disponible;
 secure : Indique si le cookie doit uniquement être transmis à travers une
connexion sécurisée HTTPS depuis le client: valeur :TRUE;
 httponly : Lorsque ce paramètre vaut TRUE, le cookie ne sera accessible que par le protocole HTTP

$_COOKIE[""] Tableau représentant tous les cookies

Tous les paramètres de setcookie() sont optionnels sauf le nom

la durée de vie par défaut d’un cookie sans date d’expiration se limite à une session de navigateur.

GI2 - Programmation Web avancée - cours PHP et MySQL E.S.T.Agadir


Séance 6 Les cookies

Création et utilisation
La création par setcookies();

Création
<?php 
// génère le cookie 
$contenu = ''; // le contenu de votre cookie 
setcookie("nom_cookie", $contenu, time()+36000); 
?> 
<html> 
<body> 
<p> 
Un cookie a été généré sur cette page. 
</p> </body> </html>
Utilisation
<html> 
<body> 
<?php 
// test l'existance d'un cookie appelé "nom_cookie"  <?php 
if (isset($_COOKIE["nom_cookie"]))  print_r($_COOKIE);
echo 'Le cookie existe ' . $_COOKIE["nom_cookie"] . '!<br />'; // ou  ?>
else 
echo 'Le cookie n\'existe pas <br />'; 
?> 
</body>

GI2 - Programmation Web avancée - cours PHP et MySQL E.S.T.Agadir


Séance 6 Les cookies

Création et utilisation
La création par setcookies();

<?php
$cookie_nom = "user";
$cookie_valeur = "Hassan";
setcookie($cookie_nom, $cookie_valeur, time() + (86400 * 30)); Envoi
// 86400 = 1 jour
?>
<html><body>
<p>Un cookie a été envoyé</p>
<?php
if(!isset($_COOKIE[$cookie_nom])) {// On vérifie si le cookie a été reçu
    echo " le nom du cookie '" . $cookie_nom . "‘nom defini!";
} else {
    echo "Cookie '" . $cookie_nom . "' est defini !<br>";
// On lit la valeur du cookie et on l’affiche
    echo " sa valeur est: " . $_COOKIE[$cookie_nom]; Lecture La récupération par
//ou bien $_COOKIE[‘user’]; $_COOKIE[""]
}?>
</body>
</html>
le cas d’un cookie sans durée d’expiration, les informations sont stockées dans la
mémoire vive de l’ordinateur.
GI2 - Programmation Web avancée - cours PHP et MySQL E.S.T.Agadir
Séance 6 Les cookies

modification
La modification par setcookies();
Pour modifier un cookie, il vous suffit de refaire appel à la fonction setcookie() avec le
nom du cookie à modifier et sa nouvelle valeur. Il remplacera le précédent de même nom.

<?php
$cookie_nom = "user";
$cookie_valeur = "Ali";
setcookie($cookie_nom, $cookie_valeur, time() + (86400 * 30));
// 86400 = 1 journée
?>
<html><body>
<?php
if(!isset($_COOKIE[$cookie_nom])) {
    echo " le nom du cookie '" . $cookie_nom . "‘nom defini!";
} else {
    echo "Cookie '" . $cookie_nom . "' est defini !<br>";
    echo " sa valeur est: " . $_COOKIE[$cookie_nom];

?>
</body>
</html>

GI2 - Programmation Web avancée - cours PHP et MySQL E.S.T.Agadir


Séance 6 Les cookies

Suppression
La suppression par setcookies();
Pour effacer un cookie, il suffit d’envoyer un cookie du même nom mais sans valeur.

<?php
// fixer la date d’expiration moins d’une heure
// Si le cookie user existe,
if ( isset( $_COOKIE[‘user'] ) ) {
// on demande au navigateur d’effacer son cookie
setcookie("user", "", time() - 3600);
// et on en efface la valeur en local
unset($_COOKIE[‘user']) ;
}
?>
<html><body>
<?php
echo "Cookie 'user' est supprimé ";
?>
</body>
</html>

GI2 - Programmation Web avancée - cours PHP et MySQL E.S.T.Agadir


Séance 6 Les cookies

Exemple 1
Objectifs:
-modification d’un cookie. À chaque passage sur la page, la valeur du cookie s’incrémente.

<?php
$message = array() ;
if (! isset($_COOKIE['visites']) ) {
$message[] = '$_COOKIE[\'visites\'] est vide' ;
$message[] = 'le cookie n\'a pas été reçu par le serveur' ;
message[] = 'on envoie le cookie avec la valeur 1' ;
setcookie('visites', 1 ) ;
} else {
$message[] = '$_COOKIE[\'visites\'] n\'est pas vide' ;
$message[] = 'la valeur reçue est ' . $_COOKIE['visites'] ;
$message[] = 'on envoie un nouveau cookie avec la valeur ‘. ( $_COOKIE['visites'] +1 ) ;
setcookie('visites', $_COOKIE['visites'] +1 ) ;
$message[] = 'le navigateur va modifier le cookie pour lui’.' donner la nouvelle valeur ' . ( $_COOKIE['visites'] +1
);
}
$message[] = 'vous pouvez recharger la page pour voir l'évolution';
echo join('<br>', $message) ;
?>

Join() : alias de implode()

GI2 - Programmation Web avancée - cours PHP et MySQL E.S.T.Agadir


Séance 6 Les cookies

Exemple 1(suite)

<?php
// On vérifie si le cookie est présent
if ( !isset( $_COOKIE['visites'])) {
// Il n’est encore jamais passé sur la page
// donc il n’a pas de cookie
$visites = 1 ;
$message = 'Vous venez pour la première fois' ;
}
Else
{
// Il est déjà venu, on incrémente son nombre de visites
$visites = $_COOKIE['visites'] + 1 ;
$message = 'Vous êtes venu '.$_COOKIE['visites'].' fois' ;
}
// On met le cookie à jour avec le nouveau nombre de visites
setcookie('visites', $visites, mktime(0,0,0,12,31,2037) ) ;
?>
<html><head><title>titre</title></head>
<body>
<p> <?php echo $message ; ?> </p>
</body>
</html>

GI2 - Programmation Web avancée - cours PHP et MySQL E.S.T.Agadir


Séance 6 Les cookies

Exemple 2
Objectifs:
-Présentation d’un petit formulaire à l’utilisateur, pour saisir son nom.
-À chaque visite (excepté la première), on lui affiche Bonjour puis son nom.

<html><head>
<title>Index du site</title>
<body>
<?php
// on teste la déclaration de notre cookie
if (isset($_COOKIE['pseudo'])) {
echo 'Bonjour '.$_COOKIE['pseudo'].' !';
}
else {
echo 'Notre cookie n\'est pas déclaré.';
// si le cookie n'existe pas, on affiche un formulaire permettant au visiteur de saisir son nom
echo '<form action="./traitement.php" method="post">';
echo 'Votre nom : <input type = "texte" name = "nom"><br />';
echo '<input type = "submit" value = "Envoyer">';
}
…….
?>

GI2 - Programmation Web avancée - cours PHP et MySQL E.S.T.Agadir


Séance 6 Les cookies

Exemple 2(suite)

<?php
If (isset($_POST['nom'])) {

// on définit une durée de vie de notre cookie (en secondes), donc un an dans notre cas
$temps = 365*24*3600;

// on envoie un cookie de nom pseudo portant la valeur de la variable $nom, c'est-à-dire


la valeur qu'a saisi la personne qui a rempli le formulaire

setcookie ("pseudo", $_POST['nom'], time() + $temps);

?>
</body>
</html>

GI2 - Programmation Web avancée - cours PHP et MySQL E.S.T.Agadir


Séance 6 Les cookies

Exemple 3
Objectifs:
-Vider le panier puis,
-Création d’un panier de fruits.

GI2 - Programmation Web avancée - cours PHP et MySQL E.S.T.Agadir


Séance 6 Les cookies

Exemple 3
Objectifs:
-Création d’un panier de fruits.

// cookie_init.php
<?php
Ecr
it ure
setCookie("panier[pomme]", 0); de
coo
setCookie("panier[poire]", 0); ki es
setCookie("panier[peche]", 0);
setCookie("panier[banane]", 0);
header("Location: cookie_ajout.php");

?>

Création et initialisation à 0 de tous les éléments du panier ou des cookies.


Redirection vers cookie_ajout.php. 

setCookie() et header() requièrent tous les 2 qu'il n'y ait pas de données émises avant dans le
script. S'il y avait eu un espace (ou d'autres caractères) devant <?php, il y aurait eu une erreur

GI2 - Programmation Web avancée - cours PHP et MySQL E.S.T.Agadir


Séance 6 Les cookies

Exemple 3(suite)

Fichier : cookie_ajout.php
<?php
// Lecture du cookie
$panier = $_COOKIE["panier"];
switch ($_GET["ajout"]) Lec
t ure
{ et m
case "pomme": $panier["pomme"]++; is e
à jo
setCookie("panier[pomme]",$panier["pomme"]); ur
de
coo
break; k ie s
case "poire": $panier["poire"]++;
setCookie("panier[poire]",$panier["poire"]);
break;
case "peche": $panier["peche"]++;
setCookie("panier[peche]",$panier["peche"]);
break;
case "banane": $panier["banane"]++;
setCookie("panier[banane]",$panier["banane"]);
break;
}

?>

GI2 - Programmation Web avancée - cours PHP et MySQL E.S.T.Agadir


Séance 6 Les cookies

Exemple 3(suite)
Lec
<html> tu re e
<body > tm
ise
<table border="4" cellspacing="4" cellpadding="4" align="center"> à jo
ur d
<tr align="center"> <td>Ajouter</td> <td>Votre commande</td> </tr> ec
ook
ie s
<tr align="center">
<td><a href="cookie_ajout.php?ajout=pomme">1Kg pommes</a> (1E)</td>
<td> <?php echo $panier["pomme"] ?> Kg pomme(s)</td> </tr>
<tr align="center">
<td> <a href="cookie_ajout.php?ajout=poire">1Kg poire</a> (1,5E)</td>
<td> <?php echo $panier["poire"]?> Kg poire(s)</td> </tr>
<tr align="center">
<td> <a href="cookie_ajout.php?ajout=peche">1Kg peche</a> (2E)</td>
<td> <?php echo $panier["peche"]?> Kg peche(s)</td> </tr>
<tr align="center">
<td><a href="cookie_ajout.php?ajout=banane">1Kg banane</a> (1E)</td>
<td> <?php echo $panier["banane"]?> Kg banane(s)</td> </tr>
</table>
<p align="center">
<a href="cookie_init.php">vider mon panier</a></p>
<p align="center"><a href="cookie_calcul.php">calculer le total</a></p>
</body> </html>

GI2 - Programmation Web avancée - cours PHP et MySQL E.S.T.Agadir


Séance 6 Les cookies

Exemple 3(suite)

Fichier : cookie_calcul.php: calcule et affiche le prix total du panier

<?php
$panier = $_COOKIE["panier"]; Uti
l is a
$total = 0; tion
de
$total += $panier["pomme"]*1; coo
ki
$total += $panier["poire"]*1.5; es
$total += $panier["peche"]*2;
$total += $panier["banane"]*1;
?>

<html>
<head> <title>Le total du panier</title> </head>
<body bgcolor="#FFFFFF">
<p align="center">Le total de votre panier: <?php echo $total ?> E.</p>
<p align="center"><a href="cookie_ajout.php">Modifier mon panier</a></p>
<p align="center"><a href="cookie_init.php">Vider mon panier</a></p>
</body>
</html>

GI2 - Programmation Web avancée - cours PHP et MySQL E.S.T.Agadir


Séance 6 Les cookies

Série 6
Exercice 1:
Créer un formulaire de saisie des deux codes couleur préférés du visiteur du site pour la couleur de fond et le
texte de la page. Les enregistrer dans deux cookies valables deux mois. À l’ouverture de la page d’accueil,
récupérer ces valeurs et créer un style utilisant ces données.

GI2 - Programmation Web avancée - cours PHP et MySQL E.S.T.Agadir


Séance 6 Les cookies

Série 6
Exercice 1:

GI2 - Programmation Web avancée - cours PHP et MySQL E.S.T.Agadir


Séance 6 Les cookies

Série 6
Exercice 1:

GI2 - Programmation Web avancée - cours PHP et MySQL E.S.T.Agadir


Séance 6 Les sessions

Définition et présentation
 Une session est une période entre un début et une fin d'une activité identifiée par identifiant.

 Une session est un ensemble de valeurs définies de manière transparente


pour le visiteur et que le serveur conserve de page en page;

 Les données d'une session sont stockées sur le serveur et non chez le client,
ce qui l'empêche de pouvoir les modifier manuellement;

Intérêts
 Partager et propager les mêmes données sur plusieurs pages ;
 Sauvegarde plusieurs données lors d’une session;
 Ranger les données d’une session sur le serveur;
 Transmission securisée des données de page en page;

Exemples:
– Sauvegarder les données personnelles d’un visiteur
– Gestion multiutilisateurs c.-à-d., gérer plusieurs comptes utilisateurs (interface personnalisé)
– Répartir les données d’un formulaire sur deux pages si le formulaire est trop long
(retenir les données fournies dans les pages précédentes)

Avantages: la sauvegarde de données confidentielles et de taille importante

GI2 - Programmation Web avancée - cours PHP et MySQL E.S.T.Agadir


Séance 6 Les sessions

Schématisation d’utilisation de sessions

GI2 - Programmation Web avancée - cours PHP et MySQL E.S.T.Agadir


Séance 6 Les sessions

Fonctions de base

PHP offre un ensemble de fonctions pour l’utilisation des sessions:

 session_start : Démarre une session ;


 session_id : Retourne l'id de la session en cours;
 session_name : Retourne le nom de la session en cours, elle sert aussi à attribuer un nom à
une session;
 session_unset : Detruit toutes les variables de la session en cours;
 session_destroy : Destruit la session en cours.

$_SESSION[" "] : variable globale contenant les données d’une session, donc la
manipulation de ces données se fait par la lecture et l’écriture de cette superglobale.

Pour lire, modifier, supprimer ou créer des informations dans la


session, il vous suffit de lire, modifier, supprimer ou créer des
entrées dans le tableau $_SESSION[].

GI2 - Programmation Web avancée - cours PHP et MySQL E.S.T.Agadir


Séance 6 Les sessions

Démarrage d’une session

<?php
// démarrage d’une session
session_start();
?>
<html> à la différence des cookies,
<body> les sessions ne sont pas
<?php faites pour durer : Elles
// définition de deux varaibles de session seront perdues après la
$_SESSION["Langage"] = "PHP";
$_SESSION["Ecole"] = "EST"; visite de l’utilisateur. Dès la
$tableau = array('un', 'deux', 'trois', 'quatre'); fermeture du navigateur, la
$_SESSION['tab'] = $tableau; session est perdue, comme
echo "Les variables de session sont definies."; pour un cookie sans date
?> d’expiration

</body>
</html>

session_start(); à mettre avant la balise HTML <balise>

GI2 - Programmation Web avancée - cours PHP et MySQL E.S.T.Agadir


Séance 6 Les sessions

Récupération des données d’une session

<?php

session_start();
?>
<html>
<body>

<?php
// affichages des variables de session deja definies dans la page précedante
echo "Le langage actuel" . $_SESSION["Langage"] . "<br>";
echo " Ecole : " . $_SESSION["Ecole"] . ".";
?>
</body>
</html>

?>

print_r($_SESSION): affichage de toutes les variables de session

GI2 - Programmation Web avancée - cours PHP et MySQL E.S.T.Agadir


Séance 6 Les sessions

Modification des données d’une session

<?php
session_start();
?>
<html>
<body>
<?php
echo " Le langage actuel " . $_SESSION["Langage"] . "<br>";
echo " Ecole :" . $_SESSION["Ecole"] . ".";
?>
</body>
</html>
// modification d’une varibale de session
<?php
$_SESSION["Langage"] = "Ajax"; Array ( [Langage] => Ajax [Ecole] => EST )
print_r($_SESSION);
?>

print_r($_SESSION): affichage de toutes les variables de session

GI2 - Programmation Web avancée - cours PHP et MySQL E.S.T.Agadir


Séance 6 Les sessions

Déstruction des données de la session

<?php <?php
session_start();
session_start(); $_SESSION['nom'] = ‘Ali';
?> echo $_SESSION['nom']; // affiche Ali
<html> // On détruit la session
<body> session_destroy();
<?php unset($_SESSION);
// supprimer toutes les varibales de session echo $_SESSION['nom'] ; // N’affiche rien
session_unset();  ?>

// détruire la session  Contrairement aux cookies, vous


session_destroy();  n’avez aucune restriction sur le
?>
type de données stockées ou la
</body>
</html> quantité d’information : vous
pouvez stocker indépendamment
des tableaux, des nombres, du
$_SESSION["Langage"] & $_SESSION["Ecole"] ne texte ou des objets sans passer
sont plus définies par l’étape de sérialisation.

il n’est pas nécessaire de supprimer une session puisque PHP l’efface de lui-
même au bout d’un certain temps

GI2 - Programmation Web avancée - cours PHP et MySQL E.S.T.Agadir


Séance 6 Les sessions

Exemple 1

<?php

session_start();

$_SESSION['prenom'] = "hassan";
$_SESSION['age'] = "inconnu";
$_SESSION['race'] = "humain";

echo "<ul>\n";
foreach($_SESSION as $cle => $valeur)
{
echo " <li><strong>".ucfirst($cle)." : </strong><em>".
$valeur."</em></li>\n";
}
echo "</ul>\n";

$_SESSION['prenom'] = "Kamal";
unset($_SESSION['age'] );
print_r($_SESSION);

?>

GI2 - Programmation Web avancée - cours PHP et MySQL E.S.T.Agadir


Séance 6 Les sessions

Exemple 2
Objectifs:
- Création d’un formulaire d’authentification d’un espace membre
- Connexion et déconnexion à un espace privé

//Connexion.php
<html>
<head>
<title>Formulaire d'identification</title>
</head>
<body>
<form action="login.php" method="post">
Votre login : <input type="text" name="login"><br />
Votre mot de passé : <input type="password" name="pwd"><br />
<input type="submit" value="Connexion">
</form>
</body>
</html>

GI2 - Programmation Web avancée - cours PHP et MySQL E.S.T.Agadir


Séance 6 Les sessions

Exemple 2(suite)
Fichier: login.php
<?php
//On définit un login et un mot de passe de base pour tester notre exemple.
//Solution intuitive lecture à partie d’une base données
$login_valide = "Ali";
$pwd_valide = "EST";
// on teste si nos variables sont définies
if (isset($_POST['login']) && isset($_POST['pwd']))
{
// on vérifie les informations saisies, pseudo et mot de passe
if ($login_valide == $_POST['login'] && $pwd_valide == $_POST['pwd'])
{
// dans ce cas, tout est ok, on peut démarrer notre session:
session_start ();
// on enregistre les paramètres de notre visiteur comme variables de session ($login et $pwd)

$_SESSION['login'] = $_POST['login'];
$_SESSION['pwd'] = $_POST['pwd'];
// on redirige notre visiteur vers une page de notre section membre
header ('location: page_membre.php');
}

GI2 - Programmation Web avancée - cours PHP et MySQL E.S.T.Agadir


Séance 6 Les sessions

Exemple 2(suite)
.
.
.
else
{
// Le visiteur n'a pas été reconnu comme étant membre de notre site.

echo '<body onLoad="alert(\'Membre non reconnu...\')">';

// puis on le redirige vers la page d'accueil

echo '<meta http-equiv="refresh" content="0;URL=Connexion.php">';


}
}
else
{
echo 'Les variables du formulaire ne sont pas déclarées.';
}

?>

GI2 - Programmation Web avancée - cours PHP et MySQL E.S.T.Agadir


Séance 6 Les sessions

Exemple 2(suite)
Fichier: page_membre.php
<?php
// On démarre la session (ceci est indispensable dans toutes les pages de notre section membre)
session_start ();
// On récupère nos variables de session
if (isset($_SESSION['login']) && isset($_SESSION['pwd'])) {
// On teste pour voir si nos variables ont bien été enregistrées
echo '<html>';
echo '<head>';
echo '<title>Page de notre section membre</title>';
echo '</head>';
echo '<body>';
echo 'Votre login est '.$_SESSION['login'].' et votre mot de passe est '.$_SESSION['pwd'].'.';
echo '<br />';
// On affiche un lien pour fermer notre session
echo '<a href="./logout.php">Déconnection</a>';
}
else {
echo 'Les variables ne sont pas déclarées.‘;
}
?>

GI2 - Programmation Web avancée - cours PHP et MySQL E.S.T.Agadir


Séance 6 Les sessions

Exemple 2(suite)
Fichier: logout.php
<?php

// On démarre la session

session_start ();

// On détruit les variables de notre session

session_unset ();

// On détruit notre session

session_destroy ();

// On redirige le visiteur vers la page d'accueil

header ('location: Connexion.php');

?>

GI2 - Programmation Web avancée - cours PHP et MySQL E.S.T.Agadir


Séance 6 Les sessions

Série 6 (suite)

Exercice 1:
Proposer un formulaire dans lequel l’utilisateur pourra saisir son prénom et son nom.
Créez des variables de session avec les valeurs entrées lorsque l’utilisateur clique sur le bouton Envoyer et
vérifiez que ces variables de session sont bien accessibles dans une 3eme page.

GI2 - Programmation Web avancée - cours PHP et MySQL E.S.T.Agadir


Séance 6 Les sessions

Série 6 (suite)

Exercice 1:

GI2 - Programmation Web avancée - cours PHP et MySQL E.S.T.Agadir


Séance 6 Les sessions

Série 6 (suite)

Exercice 1:

GI2 - Programmation Web avancée - cours PHP et MySQL E.S.T.Agadir


Séance 6 Les sessions

Série 6 (suite)

Exercice 1:

GI2 - Programmation Web avancée - cours PHP et MySQL E.S.T.Agadir


Séance 6 La gestion des emails

Introduction
La messagerie électronique (SMTP) est devenu l’un des principaux moyens de communication sur
internet;
L’e-mail constitue un élément indispensable dans la gestion de site et à l’amélioration du confort des
utilisateurs;

L’utilité des e-mails :


1) envoyer une lettre d’information (newsletter) personnalisée ;
2) tenir ses clients informés des mises à jour ;
3) Envoyer des notification sur demandes ou inscriptions
4) être tenu informé de comportements anormaux ou d’erreurs sur le site web.
5) se rendre sur le site au bon endroit, au bon moment et dans les meilleurs délais.

Techniques utilisées pour la gestion des e-mails:


6) Répondeurs automatiques
l’information est envoyée vers l’utilisateur au lieu d’attendre qu’il vienne la chercher
7) Des gestionnaire de courrier électronique (webmail);
des outils, bibliothèques ou applications permettant la gestion des e-mails;
Exemples(Open source): -Nocc http://nocc.sourceforge.net/.
-IMP http://www.horde.org/imp/.

PHP -Permet d’envoyer des e-mails sous format texte et HTML avec ou sans pièces jointes
-Permet de recevoir des e-mails
GI2 - Programmation Web avancée - cours PHP et MySQL E.S.T.Agadir
Séance 6 La gestion des emails

Envoi des emails


La gestion des envois d’e-mail en PHP se faite par La fonction mail qui admet les paramètres:
-l ’adresse du destinataire;
-l’objet;
-le corps de message;
-Entête: argument optionnel pour intégrer d’autres informations;
mail($destinataire, $subject, $message, $entete );
Exemple :

<?php

$message = ‘’Allez sur le site du http://www.php.net, vous y trouverez un


tutoriel complet sur le PHP et MySQL.’’;

mail(‘’vous@leposte.fr’’, ‘’Aide sur PHP’’, $message);

?>

Les arguments obligatoires sont le destinataire, le sujet du message et le corps du message .

Note: cette fonction ne marche que si un programme de messagerie électronique


(appelé « mailer ») est préalablement installé sur le serveur ( spécifié dans le fichier
Php.ini

GI2 - Programmation Web avancée - cours PHP et MySQL E.S.T.Agadir


Séance 6 La gestion des emails

Envoi des emails


Exemple (email sous format texte):

<?php

$destinataires = ‘toi@yahoo.fr,lui@gmail.com';// envoi à plusieurs personnes


$sujet = ‘reunion';
$entetes = "From: responsable@uiz.ac.ma \n";// l’adresse l’expéditeur
$entetes .= "Reply-to: moi@uiz.ac.ma\n"; //l’adresse de retour
$entetes .= "Cc: secretaire@uiz.ac.ma \n"; // copie carbone
$entetes .= "Bcc: directeur@uiz.ac.ma \n"; //copie carbone caché
$entetes .= "X-Priority: 1 \n"; // On indique ici que le message est urgent.
//5 niveau basse; 3 normale; 1 urgent

mail($destinataire, $sujet, "Message urgent ",$entetes);

?>

Note:
Pour changer l’expéditeur du message, deux solutions existes soit par la fonction
mail ou dans le fichier de configuration global (php.ini) à l’aide de la directive de
configuration sendmail_from

GI2 - Programmation Web avancée - cours PHP et MySQL E.S.T.Agadir


Séance 6 La gestion des emails

Envoi des emails


Exemple (sous format HTML):

<?php
// Définition du destinataire et de l’envoyeur
$destinataire = ‘toi@yahoo.com';
$exp = ‘moi@uiz.ac.ma';
// Définition du corps du message
$html=
'<html><body>' .
'<h1>E-mail au format HTML</h1>'.
'<b><u>Voici un document HTML</u></b><br>'.
'On peut jouer sur les polices, '.
'les tailles et <font color="red">même les couleurs</font>'.
'</body></html>';
mail($destinataire,
'E-mail au format HTML',
$html, "From: $exp\nReply-To: $exp\nContent-Type: text/html \n");
?>

Note: Content-Type)
Le paramètre Content-type spécifie le type du contenu du message. Par défaut, sa
valeur est text/plain (texte brute) image/jpeg (image jpeg) et text/html : message au
format HTML..
GI2 - Programmation Web avancée - cours PHP et MySQL E.S.T.Agadir
Séance 6 La gestion des emails

Recevoir des emails


Les protocoles POP3 et IMAP permettent de récupérer les emails sur un serveur distant pour
qu’ils seront accessibles localement.

Ouvrir un canal vers votre boîte aux lettres par la fonction imap_open()
imap_open($adresseboite, $utilisateur, $password)
l’adresse de la boîte aux lettres sous forme de : {nom_de_serveur:port/protocole} ;
Exemple :
<?php
$log = "pseudo";
$passe = "mot_de_passe";
// Connexion à un serveur IMAP
$boite = imap_open("{localhost:143}INBOX",$log, $passe);
// Connexion à un serveur POP
$boite2 = imap_open("{localhost:110/pop3}INBOX",$log,$passe);
// Connexion à un serveur de news
$boite3 = imap_open("{news.php.net:119/nntp}php.internals","","");
// Récupération de tous les en-têtes
$tableau_entetes = imap_headers($boite);
// Affichons l’ensemble du tableau.
print_r($tableau_entetes);
?>

GI2 - Programmation Web avancée - cours PHP et MySQL E.S.T.Agadir


Séance 6 La gestion des emails

Recevoir des emails

Fonctions:
imap_body() lit le corps d’un message.
imap_close() ferme le canal de communication avec le serveur.
imap_delete() marque le fichier pour l’effacement, dans la boîte aux lettres courante.
imap_expunge() efface tous les messages marqués pour l’effacement.
imap_header() lit les en-têtes d’un message.
imap_headers() retourne les en-têtes de tous les messages d’une boîte aux lettres.
imap_open() ouvre un canal de communication vers une boîte aux lettres.
imap_sort() trie des messages.
imap_uid() retourne l’identifiant d’un message.

Récapitulatif:
PHP permet la gestion manuelle des emails et aussi permet l’utilisation des utilitaires
‘open source (Webmail) pour le traitement de courriers.

PHP dispose aussi de la bibliothétique htmlMimeMail de phpguru.php assurant une


gestion simple et commode de la messagerie électronique; elle permet notamment la
gestion d’emails en mode texte et HTML avec des fichiers attachés disponible sur
http://phpguru.org/mime.mail.html .

GI2 - Programmation Web avancée - cours PHP et MySQL E.S.T.Agadir


Séance 6 La gestion des emails

Série 6 (suite)
Exercice 5
Envoyez un ensemble d’e-mails ayant tous le même objet et le même contenu à partir
d’une liste d’adresses contenue dans un tableau.

GI2 - Programmation Web avancée - cours PHP et MySQL E.S.T.Agadir


Séance 6 La gestion des emails

Série 6 (suite)
Exercice 6
Même exercice, mais cette fois chaque objet et chaque contenu des e-mails doit être
différent et extrait d’un tableau multidimensionnel.

GI2 - Programmation Web avancée - cours PHP et MySQL E.S.T.Agadir


Séance 6 La gestion des erreurs

Introduction
PHP permet la gestion des erreurs et des exceptions;
Une erreur est anomalie ou comportement anormal d’un script.

Exemples:
Problème de division par zéro.
 erreur de syntaxe dans un script
La connexion à la base de données n’est pas active.
Variable non initialisé.
 tentative d’ouverture d’un fichier inexistant.

Manière de gérer les erreurs:


1) Les intercepter et les traiter immédiatement par: l’affichage d’un explication ; remédier
en donnant une autre solution fonctionnel ou l’arrêt de l’exécution du script, etc.
2) Enregistrer La seconde méthode consiste à stocker les erreurs dans un journal. Il est ainsi
possible à tout moment de faire une vérification, particulièrement lors de la phase de
développement.

PHP a plusieurs systèmes d’erreurs : les erreurs PHP et les exceptions…

GI2 - Programmation Web avancée - cours PHP et MySQL E.S.T.Agadir


Séance 6 La gestion des erreurs

Les erreurs internes de PHP


le plus classique, concerne les messages envoyés par le moteur PHP quand il
rencontre quelque chose d’anormal.

Message d’erreur:
Lorsque le moteur PHP détecte une erreur; il affiche un message qui comporte les éléments
suivants:
 un niveau d’importance,
 un message explicatif,
 le nom du script en cause,
 le numéro de la ligne en cours.
Exemple

le niveau d’importance : Warning (erreur non critique),


le message explicatif : (ouverture d’un fichier non existant ou non accessible (fichier.txt))
Nom de script: erreur.php
Numéro de la ligne : ligne 3.

GI2 - Programmation Web avancée - cours PHP et MySQL E.S.T.Agadir


Séance 6 La gestion des erreurs

Les erreurs internes de PHP-Niveaux d’erreurs


dans PHP, il existe plusieurs catégories des erreurs, chaque type est identifié par une constante.

Erreurs de syntaxe (E_PARSE)


E_PARSE représente essentiellement les erreurs de syntaxe dans codes.

Erreurs critiques (E_ERROR)


E_ERROR représente l’erreur critique la plus courante. Elle intervient quand une fonctionnalité
importante ne peut pas s’exécuter (par exemple un require()).*

Avertissements (E_WARNING)
E_WARNING est le message d’avertissement le plus courant. Il intervient quand une fonction
a rencontré un comportement anormal, mais que PHP peut continuer son exécution, par
exemple types de données incompatibles…*

Syntaxe dépréciée (E_STRICT)


E_STRICT nouveauté de PHP 5. Il s’agit de messages d’avertissements
qui sont envoyés quand vous utilisez une ancienne syntaxe déconseillée, qui risque
de poser des problèmes d’interopérabilité ou de compatibilité.

GI2 - Programmation Web avancée - cours PHP et MySQL E.S.T.Agadir


Séance 6 La gestion des erreurs

Les erreurs internes de PHP


Niveaux d’erreurs (suite)

Message informatif (E_NOTICE)


E_NOTICE représente l’erreur de faible importance ; elle n’a qu’une valeur informative.
L’utilisation en lecture d’une variable non initialisée provoque un message E_NOTICE.

Gérer et contrôler une erreur


trigger_error(): fonction qui déclenche et affiche une erreur,elle prends en paramètres un texte
d’erreur et, optionnellement, un niveau d’erreur (par défaut message de type E_NOTICE)..
E_USER_WARNING, PHP envoie juste un avertissement, mais continue l’exécution du script.
E_USER_ERROR correspond à une erreur critique et PHP arrête totalement l’exécution.
E_USER_NOTICE des erreur de faible importance.

<?php <?php
Fonction_a_tester() or $nbr =-4;
trigger_error('problème', E_USER_ERROR) ; if ( $nbr < 0 ) {
?> $message = "problème avec le nbr : $nbr" ;
$niveau = E_USER_ERROR ;
@: Permet de désactiver la gestion trigger_error($message, $niveau) ;
d’erreur pour une commande particulière. }
?>
// ignore les erreurs en cas d’échec
<?php @mysql_connect() ; ?> Fatal error. Problème avec le nbr: -4 in F:\www\test.php on line 6

GI2 - Programmation Web avancée - cours PHP et MySQL E.S.T.Agadir


Séance 6 La gestion des erreurs

Les erreurs internes de PHP


Niveaux d’erreurs (suite)

Message informatif (E_NOTICE)


E_NOTICE représente l’erreur de faible importance ; elle n’a qu’une valeur informative.
L’utilisation en lecture d’une variable non initialisée provoque un message E_NOTICE.

Gérer et contrôler une erreur


trigger_error(): fonction qui déclenche et affiche une erreur,elle prends en paramètres un texte
d’erreur et, optionnellement, un niveau d’erreur (par défaut message de type E_NOTICE)..
E_USER_WARNING, PHP envoie juste un avertissement, mais continue l’exécution du script.
E_USER_ERROR correspond à une erreur critique et PHP arrête totalement l’exécution.
E_USER_NOTICE des erreur de faible importance.

<?php <?php
Fonction_a_tester() or $nbr =-4;
trigger_error('problème', E_USER_ERROR) ; if ( $nbr < 0 ) {
?> $message = "problème avec le nbr : $nbr" ;
$niveau = E_USER_WARNING ;
@: Permet de désactiver la gestion trigger_error($message, $niveau) ;
d’erreur pour une commande particulière. }
?>
// ignore les erreurs en cas d’échec
<?php @mysql_connect() ; ?>

GI2 - Programmation Web avancée - cours PHP et MySQL E.S.T.Agadir


Séance 6 La gestion des erreurs

Les erreurs internes de PHP


Niveaux d’erreurs (suite)

Message informatif (E_NOTICE)


E_NOTICE représente l’erreur de faible importance ; elle n’a qu’une valeur informative.
L’utilisation en lecture d’une variable non initialisée provoque un message E_NOTICE.

Gérer et contrôler une erreur


trigger_error(): fonction qui déclenche et affiche une erreur, elle prends en paramètres un texte
d’erreur et, optionnellement, un niveau d’erreur (par défaut message de type E_NOTICE).
E_USER_WARNING, PHP envoie juste un avertissement, mais continue l’exécution du script.
E_USER_ERROR correspond à une erreur critique et PHP arrête totalement l’exécution.
E_USER_NOTICE des erreur de faible importance.

<?php <?php
Fonction_a_tester() or $nbr =-4;
trigger_error('problème', E_USER_ERROR) ; if ( $nbr < 0 ) {
?> $message = "problème avec le nbr : $nbr" ;
$niveau = E_USER_NOTICE;
@: Permet de désactiver la gestion trigger_error($message, $niveau) ;
d’erreur pour une commande particulière. }
?>
// ignore les erreurs en cas d’échec
<?php @mysql_connect() ; ?>

GI2 - Programmation Web avancée - cours PHP et MySQL E.S.T.Agadir


Séance 6 La gestion des erreurs

Les erreurs internes de PHP


Gérer et contrôler une erreur(suite)

<?php
if ($denominateur  == 0) {
  trigger_error("Impossible de diviser par zéro", E_USER_ERROR);
}
?>

Filtrer les erreurs:


PHP offre la possibilité de filtrer les erreurs en fonction de leur niveau. Par la fonction error_reporting(),
qui admet un seul paramètre Level:

error_reporting([ int $level ]): configure et fixe le niveau des erreurs pendant la durée (d'exécution) de


votre script. Si le paramètre optionnel level n'est pas défini,  error_reporting() retournera uniquement le
niveau de rapport d'erreurs courant.

$level  peut prendre les valeurs:


E_ERROR|E_WARNING: les erreurs critiques et les messages d’avertissement.
E_ALL: toutes les erreurs sauf E_STRICT.
E_ALL & ~E_NOTICE: toutes les erreurs sauf les notices.

GI2 - Programmation Web avancée - cours PHP et MySQL E.S.T.Agadir


Séance 6 La gestion des erreurs

Les erreurs internes de PHP


<?php

// Désactiver le rapport d'erreurs


error_reporting(0); 

// Rapporte les erreurs d'exécution de script


error_reporting(E_ERROR | E_WARNING | E_PARSE);  

// Rapporter les E_NOTICE peut vous aider à améliorer vos scripts


// (variables non initialisées, variables mal orthographiées..)
error_reporting(E_ERROR | E_WARNING | E_PARSE | E_NOTICE);
 
// Rapporte toutes les erreurs à part les E_NOTICE
// C'est la configuration par défaut de php.ini
error_reporting(E_ALL ^ E_NOTICE);
 
// Reporte toutes les erreurs PHP (Voir l'historique des modifications)
error_reporting(E_ALL);
 
// Reporte toutes les erreurs PHP
error_reporting(-1);

?>

GI2 - Programmation Web avancée - cours PHP et MySQL E.S.T.Agadir


Séance 6 La gestion des erreurs

Les erreurs internes de PHP

<?php

unset($var) ;

error_reporting(E_ALL) ;

echo 'Le niveau d\'erreur est maximum';


echo $var ;
// Affiche un message d’erreur de type Notice
// car on essaye de lire $var alors qu’elle n’a pas été initialisée

error_reporting(E_ALL & ~E_NOTICE) ;


echo '<br>Le niveau d erreur ne prévient pas des warning';
echo $var ;

// N’affiche pas le message d’erreur car il est filtré


// par error_reporting
?>

GI2 - Programmation Web avancée - cours PHP et MySQL E.S.T.Agadir


Séance 6 La gestion des erreurs

Les exceptions en PHP


-Nouveauté de PHP5.
-Mécanisme permettant d’envoyer et de recevoir les messages d’erreur.
-Une exception est un type d’erreur évoluée.
En PHP, toutes les exceptions dérivent de la classe de base EXCEPTION
<?php
class Exception {
private $message ; // message d’erreur,
private $code ; // un code d’erreur numérique,
// Automatiquement rempli par PHP en interne
private $line ; // le numéro de la ligne où l’exception a été lancée.
private $file ; // adresse du script.
// Automatiquement rempli par PHP en interne
public function __construct($message, $code = NULL) {
$this->message = $message;
$this->code = $code;
}
public function getMessage() {return $this->message ;}
public function getCode() {return $this->code ;}
public function getFile() {return $this->file ;}
public function getLine() {return $this->line ;}
}
?>

GI2 - Programmation Web avancée - cours PHP et MySQL E.S.T.Agadir


Séance 6 La gestion des erreurs

Les exceptions en PHP

Une exception est un objet PHP classique.

<?php
// création d’une exception
$mon_exception = new Exception('Division par 0') ;
echo $mon_exception->getMessage() ;
?>

$mon_exception est une instance de la classe Exception.


Le constructeur prend les paramètres:
1) le message d’erreur.
2) le code d’erreur, est optionnel.
3) Le fichier et la ligne seront remplis automatiquement par PHP.

<?php
$y=0;
$z=$x/$y; // ici l’exception sera lancée (throw)
?>

GI2 - Programmation Web avancée - cours PHP et MySQL E.S.T.Agadir


Séance 6 La gestion des erreurs

Les exceptions en PHP


Gestionnaire d’une exception
PHP propose des gestionnaires des exceptions avec des blocs try et catch, qui se basent sur le
principe de lancement et réception des exceptions.

1) Lancement d’une exception:

<?php
  if ($y==0) {
        // création d’une exception
$except= new Exception('Division par 0') ;
throw $except ;
    }
?>

 Lancement de l’exception,
 PHP enregistre le nom du fichier,
 Sauvegarde le numéro de la ligne où le lancement a eu lieu
 PHP arrête alors l’exécution en cours,
 saute au premier gestionnaire d’exceptions.

Exception lancé sans traitement pas de bloc try et catch

GI2 - Programmation Web avancée - cours PHP et MySQL E.S.T.Agadir


Séance 6 La gestion des erreurs

Les exceptions en PHP


Gestionnaire d’une exception(suite)

2) Lancement et réception d’une exception:

<?php
try {
  if (!$y) {
        // création d’une exception
$except= new Exception('Division par 0') ;
throw $except ; // On saute directement au bloc catch
     }
echo "Ce message n’est pas lu si y est égal à zéro" ;
}
catch(Exception $e) {
// Cette partie n’est interprétée que si une exception a été lancée
echo 'Une exception a été reçue : ';
echo $e->getMessage() ;
}
?>

3) Interprétation de bloc try et ignore le bloc catch.


4) Si l’exception survient de bloc try, PHP arrête l’exécution de ce bloc et passe au contenu du catch.

GI2 - Programmation Web avancée - cours PHP et MySQL E.S.T.Agadir


Séance 6 La gestion des erreurs

Exemple 1 (Lancement et réception d’une exception)

<?php

try {
$mot_passe = 'Ali';
if('MED' !== $mot_passe) {
throw new Exception('Votre mot de passe est incorrect !');
}
echo 'Bonjour MED';
}
catch(Exception $e)
{
echo 'L\'erreur suivante a été générée : '."\n";
echo $e->getMessage();
}

?>

Throw lance et diffuse l’informations vers les blocs catch

GI2 - Programmation Web avancée - cours PHP et MySQL E.S.T.Agadir


Séance 6 La gestion des erreurs

Exemple 2 (Lancement et réception d’une exception)


<?php
$login = ‘Said‘; $password = ‘Ali';
try {
if('Hello' !== $login) {
throw new Exception('Votre login est incorrect !');
}
try {
if(‘MED' !== $password) {
throw new Exception('Votre password est incorrect !');
}
echo 'Bonjour MED';
}
catch(Exception $e)
{ echo 'L\'erreur suivante a été générée : '."\n";
echo $e->getMessage();
}
}
catch(Exception $e)
{ echo 'L\'erreur suivante a été générée : '."\n";
echo $e->getMessage();
}
?>

GI2 - Programmation Web avancée - cours PHP et MySQL E.S.T.Agadir


Séance 6 La gestion des erreurs

Cas de PDO
PDO vous permet de définir le déclencheur d’erreurs.
Vous pouvez demander à PDO :
• de ne pas afficher les erreurs (le mode silencieux , PDO l’utilisé par défaut) ;
• d’utiliser le mode d’erreur classique (lance une erreur de niveau E_WARNING) ;
• d’utiliser les exceptions.
<?php
// Inclusion du fichier contenant la connexion à la base
include_once('connect.inc.php');
$sql = ""; errorCode() et errorInfo()
if (!$dbh->exec($sql)) { fonctions pour la consultation des
echo $dbh->errorCode() . "<br>"; erreurs
$info = $dbh->errorInfo();
print_r($info);
// $info[0] == $dbh->errorCode() Code d’erreur unifié
// $info[1] code d’erreur spécifique au driver
setAttribute(): permet de changer
// $info[2] message d’erreur spécifique au driver
} le gestionnaire d’erreur lié à PDO
?>

<?php
$dbh->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_SILENT); // Mode silencieux
$dbh->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_WARNING); // Mode erreur classique
$dbh->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION); // Mode exception
?>

GI2 - Programmation Web avancée - cours PHP et MySQL E.S.T.Agadir


Séance 6 La gestion des erreurs

Exemple 1(PDO)
Pour utiliser les exceptions afin de gérer les erreurs avec PDO, il faut donner à l’attribut
PDO::ATTR_ERRMODE la valeur PDO::ERRMODE_EXCEPTION :

Fichier connexion:

<?php
define('USER1', 'cyril');
define('PASS1', 'motdepasse');
define('DSN1', 'mysql:host=localhost;dbname=publication');

try {
$dbh = new PDO(DSN1, USER1, PASS1);
}
catch (PDOException $e) {
print "Erreur ! : " . $e->getMessage() . "<br/>";
die();
}

?>

GI2 - Programmation Web avancée - cours PHP et MySQL E.S.T.Agadir


Séance 6 La gestion des erreurs

Exemple 1(PDO)
Pour utiliser les exceptions afin de gérer les erreurs avec PDO, il faut donner à l’attribut
PDO::ATTR_ERRMODE la valeur PDO::ERRMODE_EXCEPTION :

Fichier utilisation:

<?php
// Inclusion du fichier contenant la connexion à la base
include_once('connexion.php');
// On définit le handler d’erreur
$dbh->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);
try {
$sql = "INSERT INTO produit VALUES (NULL,'CB500', 'Honda', '6000')";

$dbh->exec($sql);

// Si une erreur a eu lieu une exception est lancée.


}
catch (PDOException $e){
print "Erreur ! : " . $e->getMessage() . "<br/>";
}

?>

GI2 - Programmation Web avancée - cours PHP et MySQL E.S.T.Agadir


Séance 6 La gestion des erreurs

Bloc Finally
Principe:
Toujours utiliser en association avec :
-un bloc try seulement.
-Un bloc try suivi d'un ou plusieurs bloc catch

Le code positionné au sein du bloc finally sera exécuté à la fin du code se trouvant dans le bloc try,
ou à la fin du code se trouvant dans le bloc catch si une exception a été levée puis interceptée.

L’objectif principal est d’effectuer des nettoyages (fermer des fichiers, libérer des ressources...). 
Sans finally Avec finally
<?php <?php
$db = mysqli_connect(); $db = mysqli_connect();
try { try {
Fonction_de_manipulations($db); Fonction_de_manipulations($db);
} }
catch (Exception $e) { finally {
mysqli_close($db); mysqli_close($db);
throw $e; }
} ?>
mysqli_close($db);
?>
 garantir qu’une portion de code soit toujours exécutée, qu’une exception ait été ou non levée
et/ou gérée.
GI2 - Programmation Web avancée - cours PHP et MySQL E.S.T.Agadir
Séance 6 La gestion des erreurs

Exemple 3(finally)
<?php
function inverse($x) {
    if (!$x) {
        throw new Exception('Division by zero.');   }
    return 1/$x;
}
try {
    echo inverse(5) . ""; }
 catch (Exception $e) {
    echo 'Caught exception: ',  $e->getMessage(), "";

finally {
    echo "First finally.";
}
try {
    echo inverse(0) . ""; } 
catch (Exception $e) {
    echo 'Caught exception: ',  $e->getMessage(), "";
}
 finally {
    echo "Second finally.";
}
// Continue execution
echo "Hello World";
?>

GI2 - Programmation Web avancée - cours PHP et MySQL E.S.T.Agadir


Séance 6 La gestion des erreurs

Personnalisation des exceptions par l’héritage


Pour gérer des cas spécifiques(type d’erreur ) , il est possible d’étendre et personnaliser la classe
Exception, en ajoutant des méthodes et des propriétés en créant des classes dérivées:

<?php

class Divisionparzero extends Exception {

private $divisionparzero ;

public function __construct($message, $divisionparzero ) {


$this-> divisionparzero = $divisionparzero ;
parent::__construct($message) ;
}
public function getdivisionparzero () {
return $this-> divisionparzero;
}
}

?>

GI2 - Programmation Web avancée - cours PHP et MySQL E.S.T.Agadir


Séance 6 La gestion des erreurs

Les exceptions en PHP


héritage et plusieurs blocs catch
PHP permet de déclarer plusieurs blocs catch pour chaque bloc try ; il utilisera le premier qui correspond.
<?php
class PbOuvertureFichier extends Exception { }
class FichierNonPresent extends PbOuvertureFichier { }
try {
throw new PbOuvertureFichier("Exception fille") ;
echo "ceci n’est pas affiché car une exception a eu lieu" ;
}
catch(FichierNonPresent $e) {
echo "ceci n’est pas affiché car l’exception " , "n’appartient pas à la classe FichierNonPresent " ;
}
catch(Exception $e) {
echo "ceci est exécuté car l’exception " ,"est un objet dérivé de la classe Exception" ;
}
catch(PbOuvertureFichier $e) {
echo "ceci n’est jamais appelé car l’exception valide d’abord " ,
"le masque Exception, positionné en premier" ;
}
?>

GI2 - Programmation Web avancée - cours PHP et MySQL E.S.T.Agadir


Séance 6 La gestion des erreurs

Exemple 3(gestions des cas d’erreurs spécifiques)


Objectifs:
- Gestion des exceptions liées aux fichiers ,
-Proposition de deux classes personnalisées,
-Classe 1: Permet de contrôler l’inexistence de fichier,
-Classe 2: Contrôle l’inaccessibilité en écriture.

<?php
/**
* Fichier FileNotFoundException.class.php
*/

class FileNotFoundException extends Exception


{

Cl
as
protected $timestamp;

se
public function __construct($message=NULL, $code=0)

1
{
parent::__construct($message, $code);
$this->timestamp = time();
}
public function getTimestamp() {
return $this->timestamp;
}
}
?>

GI2 - Programmation Web avancée - cours PHP et MySQL E.S.T.Agadir


Séance 6 La gestion des erreurs

Exemple 3 (gestions des cas d’erreurs spécifiques)

<?php
/**
* Fichier FileNotWriteableException.class.php
*/

class FileNotWriteableException extends Exception

Cl
{

as
protected $timestamp;

se
2
public function __construct($message=NULL, $code=0)
{
parent::__construct($message, $code);
$this->timestamp = time();
}
public function getTimestamp() {
return $this->timestamp;
}
}

?>

Les deux classes comportent, un nouvel attribut stockant la date à laquelle s'est
produite l'erreur et un accesseur pour récupérer cette valeur

GI2 - Programmation Web avancée - cours PHP et MySQL E.S.T.Agadir


Séance 6 La gestion des erreurs

Exemple 3(gestions des cas d’erreurs spécifiques)


Nous proposons d’hériter les 2 classes précédentes à partir de la même classe FileException et qui
contiendra l'attribut et la méthode commune. Cette nouvelle classe, quant à elle, dérivera bien entendu de
la classe native Exception.

<?php
/**
* Fichier FileException.class.php
*/
class FileException extends Exception

Cl
{

as
protected $timestamp;

se
public function __construct($message=NULL, $code=0)

m
èr
{

e
parent::__construct($message, $code);
$this->timestamp = time();
}
public function getTimestamp() {
return $this->timestamp;
}
}

?>

GI2 - Programmation Web avancée - cours PHP et MySQL E.S.T.Agadir


Séance 6 La gestion des erreurs

Exemple 3(gestions des cas d’erreurs spécifiques)

<?php
/**
* Fichier FileNotFoundException.class.php

Cl
as
*/

se
class FileNotFoundException extends FileException

1&
{

2d
public function __construct($message=NULL, $code=0)

ér
{

ivé
parent::__construct($message, $code);

es
$this->timestamp = time();

de
}

c
las
}

se
/**

m
* Fichier FileNotWriteableException.class.php

ér
eF
*/

ile
class FileNotWriteableException extends FileException

E
xc
{

ep
public function __construct($message=NULL, $code=0)

tio
{

n
parent::__construct($message, $code);
$this->timestamp = time();
}
}
?>

GI2 - Programmation Web avancée - cours PHP et MySQL E.S.T.Agadir


Séance 6 La gestion des erreurs

Exemple 3(gestions des cas d’erreurs spécifiques)


<?php
// Import des 3 classes précédentes
require_once(dirname(__FILE__).'/FileException.class.php');
require_once(dirname(__FILE__).'/FileNotFoundException.class.php');
require_once(dirname(__FILE__).'/FileNotWriteableException.class.php');
// Variables

Ex
pl
$fichier = ‘F:/www/projet/fichier.txt';

o ita
try

tio
{// Le fichier existe-t-il ?

n
if(!file_exists($fichier)) {
throw new FileNotFoundException('Le fichier '. $fichier .' est inexistant');
}
// Le fichier est-il inscriptible ?
if(!is_writeable($fichier)) {
throw new FileNotWriteableException('Le fichier '. $fichier .' n\'a pas les droits d\'écriture');
}
if(!($fp = @fopen($fichier,'w'))) {
throw new FileException('L\'ouverture du fichier '. $fichier .' a échoué');
}
// J'écris dans mon fichier
fwrite($fp, "Coucou Emacs\n");
// Puis je ferme mon fichier
fclose($fp);
}
……..?> ! dirname — Renvoie le chemin du dossier parent

GI2 - Programmation Web avancée - cours PHP et MySQL E.S.T.Agadir


Séance 6 La gestion des erreurs

Série 6 (suite)

Exercice 1
Proposer un script permettant d’additionner les valeurs positives.

Exercice 2
Reprendre l’exercice 2 en gérant l’erreur par une classe .

Exercice 3
Proposer une classe pour modéliser les points avec des cordonnées positives.

GI2 - Programmation Web avancée - cours PHP et MySQL E.S.T.Agadir