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.