PHP Gestion des erreurs
La gestion des erreurs par défaut dans PHP est très simple. Un message d'erreur avec nom de fichier, 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, gestion des erreurs est un élément important. Si votre code n'a pas de contrôle d'erreur de code, votre programme peut sembler très peu professionnel et vous pouvez être ouvert à des risques de sécurité.
Ce didacticiel contient certains l'erreur la plus commune méthodes de vérification en PHP.
Nous allons montrer les différentes méthodes de gestion des erreurs:
- Simple «die ()" déclarations
- Les erreurs personnalisées et les déclencheurs d'erreur
- Signaler une erreur
Erreur de base Manipulation: Utilisation de la matrice () la fonction
Le premier exemple montre un simple script qui ouvre un fichier texte:
<?php
$file=fopen("welcome.txt","r");
?>
$file=fopen("welcome.txt","r");
?>
Si le fichier n'existe pas, vous pouvez obtenir 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
No such file or directory in C:\webfolder\test.php on line 2
Pour éviter que l'utilisateur reçoit un message d'erreur comme celui ci-dessus, 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");
}
?>
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 erreur de manipulation d'arrêter le script après l'erreur.
Cependant, tout simplement arrêter le script n'est pas toujours la bonne façon d'aller. Jetons un coup d'oeil à d'autres fonctions PHP pour les erreurs de manipulation.
Création d'un gestionnaire d'erreur personnalisé
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 le message d'erreur), mais peut accepter jusqu'à cinq paramètres (en option: fichier, ligne numéro, et le contexte de l'erreur):
Syntaxe
error_function(error_level,error_message,
error_file,error_line,error_context)
error_file,error_line,error_context)
Paramètre | Description |
---|---|
error_level | Obligatoire. Indique le niveau de rapport d'erreur pour l'erreur définie par l'utilisateur. Doit être un nombre de valeur. Voir tableau ci-dessous pour d'éventuelles niveaux de rapport d'erreurs |
error_message | Obligatoire. Indique le message d'erreur pour l'erreur définie par l'utilisateur |
error_file | Facultatif. Indique le nom du fichier dans lequel l'erreur s'est produite |
ERROR_LINE | Facultatif. Indique le numéro de ligne dans lequel l'erreur s'est produite |
error_context | Facultatif. Spécifie un tableau contenant toutes les variables, et leurs valeurs, en cours d'utilisation lorsque l'erreur s'est produite |
Niveaux Rapporter une erreur
Ces niveaux de rapports d'erreurs sont les différents types d'erreur défini par l'utilisateur gestionnaire d'erreur peuvent être utilisés pour:
Valeur | Constante | Description |
---|---|---|
2 | E_WARNING | Non mortelles des erreurs d'exécution. L'exécution du script n'est pas arrêtée |
8 | E_NOTICE | Run-time avis. Le script 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 | Fatal erreur généré par l'utilisateur. C'est comme un jeu E_ERROR par le programmeur à l'aide de la fonction trigger_error () de PHP |
512 | E_USER_WARNING | Non-fatal généré par l'utilisateur avertissement. C'est comme un E_WARNING fixé par le programmeur à l'aide de la fonction trigger_error () de PHP |
1024 | E_USER_NOTICE | Généré par l'utilisateur préavis. C'est comme un message de type E_NOTICE fixé par le programmeur à l'aide de la fonction trigger_error () de PHP |
4096 | E_RECOVERABLE_ERROR | Catchable erreur fatale. C'est comme une E_ERROR, mais peut être pris par une poignée définie par l'utilisateur (voir aussi set_error_handler ()) |
8191 | E_ALL | Toutes les erreurs et les avertissements (E_STRICT est devenu une partie de E_ALL en PHP 5.4) |
Maintenant passons à créer une fonction pour gérer les erreurs:
function customError($errno, $errstr)
{
echo "<b>Error:</b> [$errno] $errstr<br />";
echo "Ending Script";
die();
}
{
echo "<b>Error:</b> [$errno] $errstr<br />";
echo "Ending Script";
die();
}
Le code ci-dessus est une fonction simple erreur de manipulation. Quand il est déclenché, il obtient le niveau d'erreur et un message d'erreur. Il émet alors le niveau d'erreur et le message et termine le script.
Maintenant que nous avons créé une fonction de gestion des erreurs, nous devons décider quand il doit être déclenché.
Réglez Error Handler
Le gestionnaire d'erreur par défaut de PHP est intégré dans le gestionnaire d'erreur. Nous allons faire de la fonction ci-dessus le gestionnaire d'erreur par défaut pour la durée du script.
Il est possible de changer le gestionnaire d'erreur de demander seulement quelques erreurs, de cette façon le script peut gérer les erreurs de différentes façons. Toutefois, 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'est nécessaire que d'un paramètre, un deuxième paramètre pourrait être ajoutée pour spécifier un niveau d'erreur.
Exemple
Test de la gestionnaire d'erreur 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);
?>
//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 ci-dessus doit être quelque chose comme ceci:
Error: [8] Undefined variable: test
Déclencher une erreur
Dans un scénario où les utilisateurs peuvent les données d'entrée, il est utile de déclencher des erreurs lors d'une entrée illégale se produit. En PHP, cela se fait par la fonction trigger_error ().
Exemple
Dans cet exemple une erreur se produit si le "test" variable est plus grand que "1":
<?php
$test=2;
if ($test>1)
{
trigger_error("Value must be 1 or below");
}
?>
$test=2;
if ($test>1)
{
trigger_error("Value must be 1 or below");
}
?>
La sortie du code ci-dessus doit être quelque chose comme ceci:
Notice: Value must be 1 or below
in C:\webfolder\test.php on line 6
in C:\webfolder\test.php on line 6
Une erreur peut être déclenché partout où vous voulez dans un script, et en ajoutant un second paramètre, vous pouvez spécifier quel niveau d'erreur est déclenchée.
Types d'erreurs possibles:
- E_USER_ERROR - Fatal généré par l'utilisateur erreur d'exécution. Les erreurs qui ne peuvent pas être récupérés à partir. L'exécution du script est interrompue
- E_USER_WARNING - non-fatal généré par l'utilisateur run-time avertissement. L'exécution du script n'est pas arrêtée
- E_USER_NOTICE - par défaut. Généré par l'utilisateur run-time préavis. Le script 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 grand que "1". Si un produit E_USER_WARNING nous allons utiliser notre gestionnaire d'erreur personnalisé et terminer le 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);
}
?>
//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 ci-dessus doit être quelque chose comme ceci:
Error: [512] Value must be 1 or below
Ending Script
Ending Script
Maintenant que nous avons appris à créer nos propres erreurs et la façon de les déclencher, permet de jeter un coup d'oeil à la journalisation des erreurs.
Journalisation des erreurs
Par défaut, PHP envoie un log d'erreur pour système de journalisation du serveur ou un fichier, selon la façon dont la configuration error_log est défini dans le fichier php.ini. En utilisant le error_log (), vous pouvez envoyer les journaux d'erreurs dans un fichier spécifié ou une destination distante.
Envoi de messages d'erreur pour vous par e-mail peut être un bon moyen de se faire 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 terminer le script, si une erreur se produit spécifique:
<?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,
"someone@example.com","From: webmaster@example.com");
}
//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);
}
?>
//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,
"someone@example.com","From: webmaster@example.com");
}
//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 ci-dessus doit être quelque chose comme ceci:
Error: [512] Value must be 1 or below
Webmaster has been notified
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 devraient être enregistrés sur le serveur en utilisant le système d'enregistrement par défaut de PHP.
0 commentaires:
Post a Comment
HELLO VISITORS THANKS FOR YOUR VISIT AND COMMENT