01
Aoû
2004

Gestion des erreurs en PHP

2) Gestion basique des erreurs

Ce chapitre a pour objet de vous présenter comment mettre en place une gestion des erreurs basique au sein de votre code PHP. Pour cela, nous allons utiliser les fonctions @ et die() présentées ci-dessous.

2.1) Les fonctions @ et die ()

@
@ n'est pas à proprement parler une fonction mais plutôt un mot-clé du langage.
Son utilité est de désactiver l'affichage d'un message d'erreur généré par une fonction (exemple d'un include d'un fichier inexistant).

die()
La fonction die() permet de terminer l'exécution d'un script. Elle peut prendre en argument un message que PHP affichera à l'écran.
Notez que die() est un alias de la fonction exit().

Ces deux fonctions peuvent être associées pour permettre au développeur de générer ses propres messages d'erreurs sans afficher les messages d'erreur par défaut de PHP. Cela se fait en rajoutant le signe @ devant le nom de la fonction et en rajoutant le code or die ("votre message") après l'appel de la fonction.
C'est ce que nous allons voir dans la seconde partie ci-dessous.

2.2) Exemple d'utilisation

Pour cet exemple, je vais présenter un script PHP qui permet de se connecter à un serveur MySQL pour récupérer et traiter les données d'une table.

<?php
// Variables de connection
$hote "localhost";
$user "root";
$pass "";
$bdd "GestionCommerciale";
$tbl "clients";

// Connexion au     serveur MySQL
$connexion = @mysql_connect ($hote $user $pass)
or die (
"La connexion au serveur '$hote' a echouée avec le login '$user' et le mot de passe '$pass' ...");

// Choix de la base de données
@mysql_select_db ($bdd $connexion)
or die (
"La connexion à la base de données '$bdd' a échouée ...");

// Requête
$sql_clients "SELECT nom_client , prenom_client , mail_client
FROM " 
$tbl "
ORDER BY nom_client , prenom_client ASC"
;

$req_clients = @mysql_query ($sql_clients $connexion)
or die (
"Erreur dans la requête<br>" nl2br ($sql_clients) ."<br>" mysql_errno ($connexion) . " : " mysql_error ($connexion));

// On récupère les données
while ($res_clients mysql_fetch_assoc ($req_clients))
{
// Traitements
}
?>

Explications :
En cas d'erreur qui serait générée par la fonction mysql_connect(), mysql_select_db() ou mysql_query(), le message standard de PHP ne sera pas affiché grâce à l'emploi de @.
De plus, le script sera stoppé et un message personnalisé sera affiché par la fonction die().

2.3) Conclusion

Cette méthode a pour avantage d'être facile à comprendre et simple à implémenter. Cependant, elle montre rapidement ces limites. En effet, il n'est possible d'avoir un message d'erreur standard par type d'erreur.
De plus, elle ne constitue qu'une simple substitution du sytème de gestion des erreurs standard de PHP.
Nous allons donc voir dans le prochain chapitre comment réaliser une véritable alternative à ce système : créer son propre gestionnaire d'erreur.

Posté par Renaud Castéran à 13:08 dans la catégorie Articles | RSS catégorie
Tag(s) associé(s) :
Partager cet article : Ajouter en favori sur KreuZZPoster cet article sur ScoopeoPoster cet article sur FuzzPoster cet article sur diggAjouter en favori sur Del.icio.usPoster cet article sur reddit
manumanu
03/08/04 12:44:41

Il manque juste un petit " }" à la ligne 23, après: "... case E_NOTICE : { $stopper = false; $type_erreur = "Notification"; break; ..."

;-) Bon article!

renaud
renaud
16/08/04 10:37:36

Oooppppsss comment ais-je pu commettre cette erreur ??? Désolé pour cette accolade manquante ...

corto
17/11/04 21:05:26

erreur aussi dans le premier case; la variable s'apelle $type et non pas $type_erreur

mifrog
21/03/05 10:20:44

bonjour. Comment se fait-il que le script de gestion des erreurs ne détecte jamais les erreurs de type E_PARSE? J'ai php 4.3.3. J'ai modifié les petites erreurs dans le script (paranthèse manquante, variable type), j'ai testé à mort ce script, et il ne détecte en fait que les erreurs de type E_USER_WARNING, E_USER_NOTICE, E_USER_ERROR...

OnRencontre
18/10/06 15:14:10

Enfin un article complet et bien expliqué à ce sujet... bravo !

pioc
09/07/07 16:36:50

Le script ne détecte pas les erreurs fatales. normal car elles interrompent le script et ne permettent donc pas la gestion d'erreur! Pour détecter les erreurs fatales, il faut utiliser le fichier de log de php

nbmgwguv
30/09/07 06:34:29

URL=http://adsmigvh.comkaajttxk/URL iugsoinl http://uduylezs.com lvueozwx xyydbgkn <a href="http://rsfiebqd.com">hzrrzpss</a>

mhqwtyzi
14/10/07 06:01:55

jpusgijy http://lvnnfdwy.com hgkbelac mkhjkqhg URL=http://casrzedv.comujxuasvw/URL <a href="http://dpfbshkh.com">ypcazkxa</a>

megaehiu
28/10/07 22:29:37

URL=http://cyqpziyf.comyqmfwlmr/URL keygqtvc http://rmluyngi.com rhcpkwpj fhwtfolt <a href="http://kemukrth.com">evfoxdub</a>

ioxyoudr
02/05/08 02:57:10

URL=http://cnnmqotd.comimnfnmby/URL <a href="http://ldcvwwfe.com">gabceekx</a> dawbhrax http://dnnzstxj.com uphblnhe kzmjjaru

fjwjpkao
02/05/08 05:24:54

<a href="http://aiogpsol.com">shhbdnzq</a> URL=http://jkvchstv.comwgryophu/URL kgafpxgh http://hqhrjops.com oxkkzwsr oskjbpxc

marrwpyl
23/12/08 22:47:05

URL=http://xibaqrft.combsrxkqzu/URL vgunnxut http://hfotapqf.com lneookld zycvrjwq <a href="http://kesenigg.com">hvzujjel</a>

vmgqkrsr
29/12/08 03:17:16

URL=http://dxveabge.comidvyhwjh/URL <a href="http://xewnuoyr.com">mosictlf</a> bamnwnqv http://ntixtfut.com gfcyiqxc yrfqsajp

pcbjerxz
29/12/08 03:21:23

yqndnuhb http://durawbfv.com dztkzmbd uhdhempe <a href="http://uyjumjsp.com">mycucldl</a> URL=http://vaddrteb.comqeffziux/URL

brmttpxg
29/12/08 03:29:31

lzaijcqv http://ejflplcc.com cvzkhzhn mdennegz <a href="http://mgoxclqo.com">eqdzenfm</a> URL=http://skgupqtk.comtoxlieoz/URL

vdngnnjk
29/12/08 04:36:15

URL=http://smyodkdf.comxzuajfzp/URL <a href="http://qbkinnsn.com">anvantzk</a> ednbougg http://wukrrqxq.com etncdqic xflotrdv

aleve
07/09/09 06:45:38

Never read a book through merely because you have begun it.

hoodia
07/09/09 06:46:27

The advantage of a classical education is that it enables you to despise the wealth that it prevents you from achieving.

order adipex
07/09/09 06:52:03

Truth has beauty, power and necessity.

lansoprazole
07/09/09 13:58:23

I don't believe in intuition. When you get sudden flashes of perception, it is just the brain working faster than usual. But you've been getting ready to know it for a long time, and when it comes, you feel you've known it always.

augmentin
07/09/09 13:59:10

We owe something to extravagance, for thrift and adventure seldom go hand in hand.

Les commentaires ne sont pas autorisés pour ce billet