Derniers tutoriels de développement web
 

PHP La gestion des erreurs


La gestion des erreurs par défaut dans PHP est très simple. Un message d'erreur avec nom, numéro de ligne et un message décrivant l'erreur est envoyé au navigateur.


Gestion des erreurs PHP

Lors de la création des scripts et des applications Web, la gestion des erreurs est une partie importante. Si votre code n'a pas le code de vérification d'erreur, votre programme peut sembler très peu professionnel et vous pouvez être ouvert à des risques de sécurité.

Ce tutoriel contient quelques-unes de l'erreur la plus fréquente des méthodes de vérification en PHP.

Nous illustrons les différentes méthodes de gestion des erreurs:

  • Simple " die() " déclarations
  • Les erreurs personnalisées et déclencheurs d'erreur
  • Rapport d'erreurs

Gestion des erreurs de base: Utilisation de la die() fonction

Le premier exemple montre un script simple qui ouvre un fichier texte:

<?php
$file=fopen("welcome.txt","r");
?>

Si le fichier n'existe pas, vous obtiendrez peut-être une erreur comme ceci:

Warning : fopen(welcome.txt) [function.fopen]: failed to open stream:
No such file or directory in C:\webfolder\test.php on line 2

Pour empêcher l'utilisateur d'obtenir un message d'erreur comme celle-ci, nous testons si le fichier existe avant d'essayer d'y accéder:

<?php
if(!file_exists("welcome.txt")) {
  die("File not found");
} else {
  $file=fopen("welcome.txt","r");
}
?>

Maintenant, si le fichier n'existe pas, vous obtenez une erreur comme ceci:

File not found

Le code ci-dessus est plus efficace que le code précédent, car il utilise un mécanisme simple de gestion des erreurs pour arrêter le script après l'erreur.

Cependant, simplement arrêter le script est pas toujours la bonne façon de procéder. Jetons un coup d'oeil à des fonctions PHP alternatives pour les erreurs de manipulation.


Création d'un gestionnaire d'erreur personnalisée

Création d'un gestionnaire d'erreur personnalisé est assez simple. Nous créons simplement une fonction spéciale qui peut être appelée lorsqu'une erreur se produit en PHP.

Cette fonction doit être capable de gérer un minimum de deux paramètres (niveau d'erreur et un message d'erreur) , mais peut accepter jusqu'à cinq paramètres (optionally: file, line-number, and the error context) en (optionally: file, line-number, and the error context) :

Syntaxe

error_function(error_level,error_message,
error_file,error_line,error_context)
Paramètre La description
error_level Champs obligatoires. Indique le niveau de rapport d'erreur pour l'erreur définie par l'utilisateur. Doit être un numéro de valeur. Voir le tableau ci-dessous pour les niveaux possibles de rapport d'erreur
error_message Champs obligatoires. Indique le message d'erreur pour l'erreur définie par l'utilisateur
error_file Optionnel. Spécifie le nom du fichier dans lequel l'erreur est survenue
error_line Optionnel. Indique le numéro de ligne dans laquelle l'erreur est survenue
error_context Optionnel. Indique un tableau contenant toutes les variables et leurs valeurs, en cours d'utilisation lorsque l'erreur est survenue

Erreur niveaux rapport

Ces niveaux de rapport d'erreur sont les différents types d'erreur le gestionnaire d'erreurs défini par l'utilisateur peut être utilisé pour:

Valeur Constante La description
2 E_WARNING erreurs d'exécution non mortels. L'exécution du script n'est pas interrompue
8 E_NOTICE Avis d'exécution. Le script a trouvé quelque chose qui pourrait être une erreur, mais pourrait également se produire lors de l'exécution d'un script normalement
256 E_USER_ERROR erreur fatale généré par l'utilisateur. Cela ressemble à une E_ERROR fixée par le programmateur en utilisant la fonction PHP trigger_error()
512 E_USER_WARNING avertissement généré par les utilisateurs non mortels. Cela ressemble à un E_WARNING fixé par le programmateur en utilisant la fonction PHP trigger_error()
1024 E_USER_NOTICE avis généré par l'utilisateur. Cela ressemble à une E_NOTICE fixée par le programmateur en utilisant la fonction PHP trigger_error()
4096 E_RECOVERABLE_ERROR Catchable erreur fatale. Cela ressemble à une E_ERROR mais peut être pris par une poignée définie par l'utilisateur (see also set_error_handler() )
8191 E_ALL Toutes les erreurs et les avertissements (E_STRICT became a part of E_ALL in PHP 5.4)

permet maintenant de créer une fonction pour gérer les erreurs:

function customError($errno, $errstr) {
  echo "<b>Error:</b> [$errno] $errstr<br>";
  echo "Ending Script";
  die();
}

Le code ci-dessus est une simple fonction de gestion des erreurs. Lorsqu'il est déclenché, il obtient le niveau d'erreur et un message d'erreur. Il délivre alors le niveau d'erreur et le message et se termine le script.

Maintenant que nous avons créé une fonction de gestion des erreurs, nous devons décider quand il doit être déclenché.


Gestionnaire de jeu d'erreur

Le gestionnaire d'erreurs par défaut pour PHP est construit dans le gestionnaire d'erreurs. Nous allons faire la fonction au-dessus du gestionnaire d'erreur par défaut pour la durée du script.

Il est possible de changer le gestionnaire d'erreurs pour demander que des erreurs, de cette façon le script peut gérer les différentes erreurs de différentes façons. Cependant, dans cet exemple, nous allons utiliser notre gestionnaire d'erreur personnalisé pour toutes les erreurs:

set_error_handler("customError");

Puisque nous voulons que notre fonction personnalisée pour gérer toutes les erreurs, le set_error_handler() nécessaire seulement un paramètre, pourrait être ajouté un deuxième paramètre pour spécifier un niveau d'erreur.

Exemple

Test du gestionnaire d'erreurs en essayant de variable de sortie qui n'existe pas:

<?php
//error handler function
function customError($errno, $errstr) {
  echo "<b>Error:</b> [$errno] $errstr";
}

//set error handler
set_error_handler("customError");

//trigger error
echo($test);
?>

La sortie du code doit être quelque chose comme cela ci-dessus:

Error: [8] Undefined variable: test

Déclencher une erreur

Dans un script où les utilisateurs peuvent les données d'entrée, il est utile de déclencher des erreurs lorsque survient l'entrée illégale. En PHP, cela se fait par le trigger_error() fonction.

Exemple

Dans cet exemple , une erreur se produit si le "test" variable est plus grande que "1" :

<?php
$test=2;
if ($test>=1) {
  trigger_error("Value must be 1 or below");
}
?>

La sortie du code doit être quelque chose comme cela ci-dessus:

Notice : Value must be 1 or below
in C:\webfolder\test.php on line 6

Une erreur peut être déclenchée partout où vous le souhaitez dans un script, et en ajoutant un second paramètre, vous pouvez spécifier le niveau d'erreur est déclenchée.

Les types possibles d'erreur:

  • E_USER_ERROR - erreur d'exécution généré par l'utilisateur Fatal. Les erreurs qui ne peuvent pas être ignorées. L'exécution du script est interrompue
  • E_USER_WARNING - avertissement d'exécution généré par l'utilisateur non fatale. L'exécution du script n'est pas interrompue
  • E_USER_NOTICE - Par défaut. avis d'exécution généré par l'utilisateur. Le script a trouvé quelque chose qui pourrait être une erreur, mais pourrait également se produire lors de l'exécution d'un script normalement

Exemple

Dans cet exemple , un E_USER_WARNING se produit si le "test" variable est plus grande que "1" . Si un E_USER_WARNING se produit, nous utiliserons notre gestionnaire d'erreur personnalisé et à la fin du script:

<?php
//error handler function
function customError($errno, $errstr) {
  echo "<b>Error:</b> [$errno] $errstr<br>";
  echo "Ending Script";
  die();
}

//set error handler
set_error_handler("customError",E_USER_WARNING);

//trigger error
$test=2;
if ($test>=1) {
  trigger_error("Value must be 1 or below",E_USER_WARNING);
}
?>

La sortie du code doit être quelque chose comme cela ci-dessus:

Error: [512] Value must be 1 or below
Ending Script

Maintenant que nous avons appris à créer nos propres erreurs et comment les déclencher, permet de jeter un oeil à la journalisation des erreurs.


Enregistrement d'erreur

Par défaut, PHP envoie un journal d'erreurs au système d'enregistrement du serveur ou un fichier, selon la façon dont la configuration error_log est définie dans le fichier php.ini. En utilisant le error_log() la fonction que vous pouvez envoyer des journaux d'erreur dans un fichier ou une destination distante.

L'envoi de messages d'erreur pour vous par e-mail peut être un bon moyen d'obtenir avisé des erreurs spécifiques.

Envoyer un message d'erreur par e-mail

Dans l'exemple ci-dessous, nous vous enverrons un e-mail avec un message d'erreur et de fin du script, si une erreur spécifique se produit:

<?php
//error handler function
function customError($errno, $errstr) {
  echo "<b>Error:</b> [$errno] $errstr<br>";
  echo "Webmaster has been notified";
  error_log("Error: [$errno] $errstr",1,
  "[email protected]","From: [email protected]");
}

//set error handler
set_error_handler("customError",E_USER_WARNING);

//trigger error
$test=2;
if ($test>=1) {
  trigger_error("Value must be 1 or below",E_USER_WARNING);
}
?>

La sortie du code doit être quelque chose comme cela ci-dessus:

Error: [512] Value must be 1 or below
Webmaster has been notified

Et le courrier reçu à partir du code ci-dessus ressemble à ceci:

Error: [512] Value must be 1 or below

Cela ne devrait pas être utilisé avec toutes les erreurs. erreurs régulières doivent être enregistrées sur le serveur en utilisant le système d'enregistrement par défaut de PHP.