亚洲国产日韩欧美一区二区三区,精品亚洲国产成人av在线,国产99视频精品免视看7,99国产精品久久久久久久成人热,欧美日韩亚洲国产综合乱

Gestion des erreurs PHP

En PHP, la gestion des erreurs par défaut est simple. Un message d'erreur est envoyé au navigateur avec le nom du fichier, le numéro de ligne et un message décrivant l'erreur.


Gestion des erreurs PHP

Lors de la création de scripts et d'applications Web, erreur la manipulation est une partie importante. Si votre code manque de codage de détection d’erreurs, le programme n’aura pas l’air professionnel et ouvrira la porte à des risques de sécurité.

Ce tutoriel couvre certaines des méthodes de détection d'erreurs les plus importantes en PHP.

Nous vous expliquerons différentes méthodes de gestion des erreurs?:

· Simple instruction "die()"

· Erreurs et erreurs personnalisées Déclencheurs

· Rapport d'erreurs


Gestion des erreurs de base?: utilisez la fonction die()

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

<?php
$open=fopen('error.txt','r');
echo $open;
?>

Si le fichier n'existe pas, vous obtiendrez une erreur comme celle-ci?:

Avertissement?: fopen(error.txt) [function.fopen]?: échec d'ouverture du flux?:
Aucun fichier ou répertoire de ce type dans /www/php/test/test.php en ligne 2

Afin d'éviter que les utilisateurs ne re?oivent des messages d'erreur similaires à celui ci-dessus, nous visitons Fichier avant de vérifier si le fichier existe?:

<?php
header("Content-type:text/html;charset=utf-8");
if(!file_exists('error.txt')){
    die("文件不存在");
}else{
    $file=fopen('error.txt','r');
}
?>

Maintenant, si le fichier n'existe pas, vous obtiendrez un message d'erreur comme celui-ci?:

Le fichier n'existe pas

Par rapport au code précédent, le code ci-dessus est plus efficace car il utilise un mécanisme simple de gestion des erreurs pour terminer le script après une erreur.

Cependant, simplement mettre fin au script n'est pas toujours approprié. Examinons les fonctions PHP alternatives pour gérer les erreurs.


Créer un gestionnaire d'erreurs personnalisé

Créer un gestionnaire d'erreurs personnalisé est très simple. Nous avons simplement créé une fonction dédiée qui peut être appelée lorsqu'une erreur survient en PHP.

La fonction doit être capable de gérer au moins deux paramètres (niveau d'erreur et message d'erreur), mais peut accepter jusqu'à cinq paramètres (facultatif?: fichier, numéro de ligne et contexte d'erreur)?:

fonction_erreur (niveau_erreur, message_erreur, fichier_erreur, ligne_erreur, contexte_erreur)


      參數(shù)      描述


  error_level

必需。為用戶定義的錯誤規(guī)定錯誤報告級別。必須是一個數(shù)字。參見下面的表格:錯誤報告級別。
  error_message必需。為用戶定義的錯誤規(guī)定錯誤消息。

  error_file可選。規(guī)定錯誤發(fā)生的文件名。
  error_line可選。規(guī)定錯誤發(fā)生的行號。
  error_context可選。規(guī)定一個數(shù)組,包含了當錯誤發(fā)生時在用的每個變量以及它們的值。

Niveaux de rapport d'erreurs

Ces niveaux de rapport d'erreurs sont gérés par des gestionnaires d'erreurs définis par l'utilisateur. Différents types d'erreurs?:

           常量    描述
    2E_WARNING非致命的 run-time 錯誤。不暫停腳本執(zhí)行。

     

    8


E_NOTICE

run-time 通知。在腳本發(fā)現(xiàn)可能有錯誤時發(fā)生,但也可能在腳本正常運行時發(fā)生。

     

    256


E_USER_ERROR

致命的用戶生成的錯誤。這類似于程序員使用 PHP 函數(shù) trigger_error() 設置的 E_ERROR。

   

    512


E_USER_WARNING

非致命的用戶生成的警告。這類似于程序員使用 PHP 函數(shù) trigger_error() 設置的 E_WARNING。
valeur
Constante< ??> Description
2E_WARNINGExécution non fatale -erreur de temps. Ne suspendez pas l’exécution du script.
? 8
E_NOTICE
notification d'exécution. Se produit lorsque le script détecte une erreur possible, mais peut également se produire lorsque le script s'exécute normalement.
256
E_USER_ERROR
utilisateur fatal erreurs générées. Ceci est similaire à E_ERROR défini par le programmeur à l'aide de la fonction PHP trigger_error().
512
E_USER_WARNING
Avertissement non fatal généré par l'utilisateur. Ceci est similaire au E_WARNING défini par le programmeur à l'aide de la fonction PHP trigger_error().

     

    1024


E_USER_NOTICE

用戶生成的通知。這類似于程序員使用 PHP 函數(shù) trigger_error() 設置的 E_NOTICE。

     

    4096



E_RECOVERABLE_ERROR

可捕獲的致命錯誤。類似 E_ERROR,但可被用戶定義的處理程序捕獲。(參見 set_error_handler())

     

    8191


E_ALL

所有錯誤和警告。(在 PHP 5.4 中,E_STRICT 成為 E_ALL 的一部分)
? ? ?? ? 1024< /td>

> E_USER_NOTICE
用戶生成Le PHP utilise trigger_error() pour E_NOTICE.
? ? ?? ? 4096
>
E_RECOVERABLE_ERROR
valign= "top" style="border-width: 1px; style de bordure?: solide?; word-break: break-all;">? ? ?? ? 8191
E_ALL
所有錯誤和警告。(在 PHP 5.4 中,E_STRICT et E_ALL 的一部分)

Maintenant, créons une fonction qui gère les erreurs?:

<?php
header("Content-type:text/html;charset=utf-8");
function customError($errno, $errstr)
{
    echo "<b>Error:</b> [$errno] $errstr<br>";
    echo "腳本結束";
    die();
}
?>

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

Maintenant que nous avons créé une fonction de gestion des erreurs, nous devons déterminer quand la déclencher.


Définir le gestionnaire d'erreurs

Le gestionnaire d'erreurs par défaut de PHP est intégré gestionnaire d'erreurs. Nous allons transformer la fonction ci-dessus en gestionnaire d'erreurs par défaut lorsque le script est en cours d'exécution.

Le gestionnaire d'erreurs peut être modifié pour s'appliquer uniquement à certaines erreurs, afin que le script puisse gérer différentes erreurs de différentes manières. Cependant, dans ce cas, nous allons utiliser notre gestionnaire d'erreurs personnalisé pour toutes les erreurs?:

set_error_handler("customError");

Depuis nous voulons que notre fonction personnalisée gère toutes les erreurs, set_error_handler() ne nécessite qu'un seul paramètre et un deuxième paramètre peut être ajouté pour spécifier le niveau d'erreur


Exemple

Nous combinons les connaissances que nous avons apprises ci-dessus et essayons de générer des variables inexistantes pour tester ce gestionnaire d'erreurs?:

<?php
header("Content-type:text/html;charset=utf-8");
// 錯誤處理函數(shù)
function customError($errno, $errstr)
{
    echo "<b>Error:</b> [$errno] $errstr";
}
// 設置錯誤處理函數(shù)
set_error_handler("customError");
// 觸發(fā)錯誤
echo($test);
//關閉了所有的錯誤顯示
error_reporting(0);
//顯示所有錯誤
//error_reporting(E_ALL);
//顯示所有錯誤,但不顯示提示
//error_reporting(E_ALL & ~ E_NOTICE);
?>

Résultat de l'exécution du programme?:

Erreur?: [8] Variable non définie?: test

Le résultat de l'exécution nous indique que le niveau d'erreur est 8 , et le message d'erreur est?: Une variable inexistante


déclenche une erreur

où l'utilisateur saisit des données dans le script, utile pour déclencher une erreur lorsque la saisie de l'utilisateur n'est pas valide. En PHP, cette tache est accomplie par la fonction trigger_error() .

Exemple

Dans cet exemple, si la variable "test" est supérieure à "1", une erreur se produira?:

<?php
header("Content-type:text/html;charset=utf-8");
$test=2;
if ($test>1)
{
    trigger_error("變量值必須小于等于 1");
}
?>

Résultat de l'exécution du programme :

Remarque : La valeur de la variable doit être inférieure ou égale à 1 dans D:WWWAdvanced tutorielerrorerror_1.php en ligne 6


Vous pouvez déclencher des erreurs n'importe où dans le script, et en ajoutant un deuxième paramètre, vous pouvez spécifier le niveau d'erreur qui est déclenché.

Types d'erreurs possibles?:

· E_USER_ERROR - Erreur d'exécution fatale générée par l'utilisateur. L'erreur ne peut pas être récupérée. L'exécution du script a été interrompue.

· E_USER_WARNING - Avertissement d'exécution non fatal généré par l'utilisateur. L'exécution du script n'est pas interrompue.

·?E_USER_NOTICE - Par défaut. Notifications d'exécution générées par l'utilisateur. Se produit lorsque le script détecte une erreur possible, mais peut également se produire lorsque le script s'exécute normalement.


Exemple

Dans cet exemple, si la variable "test" est supérieure à "1", l'erreur E_USER_WARNING se produit. Si E_USER_WARNING se produit, nous utiliserons notre gestionnaire d'erreurs personnalisé et terminerons le script?:

<?php
header("Content-type:text/html;charset=utf-8");
// 錯誤處理函數(shù)
function customError($errno, $errstr)
{
    echo "<b>Error:</b> [$errno] $errstr<br>";
    echo "腳本結束";
    die();
}
// 設置錯誤處理函數(shù)
set_error_handler("customError",E_USER_WARNING);
// 觸發(fā)錯誤
$test=2;
if ($test>1)
{
    trigger_error("變量值必須小于等于 1",E_USER_WARNING);
}
?>

Résultat de l'exécution du programme?:

Erreur?: [512] La valeur de la variable doit être inférieure à ou égal à 1
Le script se termine

Le résultat de l'exécution nous indique que la valeur du niveau d'erreur est 512. Le message d'erreur devient le message d'invite que nous avons défini avec la fonction trigger_error


Journalisation des erreurs

Dans certaines entreprises, il existe des systèmes spéciaux de collecte de journaux. Le système de collecte de journaux vous aidera silencieusement à collecter les erreurs, les avertissements et les invites en coulisse.

Certaines entreprises ne disposent pas non plus d'un système de collecte de journaux dédié et collectent les journaux en cours d'exécution à partir du serveur via des fichiers.

Parmi eux?: les erreurs et avertissements PHP doivent être re?us.

Ensuite, la question se pose?: si le niveau de rapport d'erreurs est défini bien avant que les utilisateurs puissent le voir, comment collecter les erreurs dans le système de journalisation??

Voici les éléments de configuration pertinents qui doivent être utilisés dans php.ini. Ces deux éléments de configuration sont?:

< / tr>< tr >< / tableau>

Exemple

<?php
//無法連接到數(shù)據(jù)庫服務器,直接記錄到php.ini 中的error_log指定位置
error_log("無法連接到數(shù)據(jù)庫服務器服務器");
//可以發(fā)送郵件,但是php.ini必須配置過郵件系統(tǒng)
error_log('可以用郵件報告錯誤,讓運維人員半夜起床干活',1 ,'liwenkai@phpxy.com');
//記錄在指定的位置
error_log("我是一個錯誤喲", 3, "d:/test/my-errors.log");
?>

Exemple

Dans l'exemple ci-dessous, si une erreur spécifique se produit, nous enverrons un e-mail avec un message d'erreur et terminerons le script?:

<?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);
 }
 ?>

Résultat de l'exécution du programme?:

Erreur?: [512] La valeur doit être inférieure ou égale à 1
Le webmaster a été informé

L'e-mail re?u à partir du code ci-dessus ressemble à ceci?:

Erreur?: [512] La valeur doit être inférieure ou égale à 1

Cette méthode ne convient pas à toutes les erreurs. Les erreurs générales doivent être enregistrées sur le serveur à l'aide du système de journalisation PHP par défaut.

Remarque?: L'envoi d'e-mails dans error_log peut ne pas être familier aux débutants, vous n'avez donc pas besoin de ma?triser certaines connaissances.


error_reporting signalant le type d'erreur

error_reporting fait référence au Rapport d'erreur. Il existe également un tel paramètre dans php.ini. ce paramètre. Détermine les types d'erreurs que le moteur PHP enregistre, rapporte et affiche.

1. Définissez le paramètre error_reporting dans php.ini. Si le paramètre error_reporting est défini sur 0. Les erreurs dans l’ensemble du moteur PHP ne seront ni affichées, ni affichées, ni enregistrées. Il ne sera pas enregistré dans la journalisation qui sera abordée dans le chapitre suivant.

Si nous voulons afficher toutes les erreurs, nous pouvons écrire?:

error_reporting = E_ALL

Voulez afficher toutes les erreurs mais exclure Astuce, vous pouvez écrire ce paramètre comme?:

error_reporting = E_ALL & ~ E_NOTICE

Afficher toutes les erreurs, mais exclure les invites, la compatibilité et Compatibilité future. Peut s'écrire?:

error_reporting = E_ALL & ~E_NOTICE & ~E_STRICT & ~E_DEPRECATED


2. Dans certains cas, nous n'avons pas l'autorisation d'utiliser le fichier php.ini, mais que devons-nous faire si nous voulons contr?ler error_reporting??

Au début du fichier xxxx.php en cours d'exécution, nous pouvons utiliser la fonction error_reporting() pour atteindre l'objectif.

<?php
//關閉了所有的錯誤顯示
error_reporting(0);
//顯示所有錯誤
//error_reporting(E_ALL);
//顯示所有錯誤,但不顯示提示
//error_reporting(E_ALL & ~ E_NOTICE);
?>

Vous pouvez essayer le code ci-dessus et essayer d'écrire intentionnellement le mauvais code. Indique si l'erreur spécifiée sera affichée dans le fichier actuel.

[Développer et comprendre les points de connaissance]?:

@ Le symbole est une seule ligne que nous avons apprise auparavant qui n'affiche pas d'erreurs, veuillez ne pas utiliser ou utiliser moins de symbole @.


Instance

Lisons un fichier inexistant et démontrons le processus d'implémentation avec ce code php?:

<?php
//讀取一個不存在的adsaf.txt文件,用@符抑制錯誤
@$fp = fopen('adsaf.txt','r');
?>
    @符效率較低,它在php內(nèi)核中的實現(xiàn)過程是:
<?php
//關閉錯誤
error_reporting(0);
//讀取一個不存在的文件,顯示錯誤
//顯示錯誤
error_reporting(E_ALL & ~ E_NOTICE);
?>



Formation continue
||
<?php header("Content-type:text/html;charset=utf-8"); // 錯誤處理函數(shù) function customError($errno, $errstr) { echo "<b>Error:</b> [$errno] $errstr"; } // 設置錯誤處理函數(shù) set_error_handler("customError"); // 觸發(fā)錯誤 echo($test); //關閉了所有的錯誤顯示 error_reporting(0); //顯示所有錯誤 //error_reporting(E_ALL); //顯示所有錯誤,但不顯示提示 //error_reporting(E_ALL & ~ E_NOTICE); ?>
soumettreRéinitialiser le code
<button id="vmcsc"><nobr id="vmcsc"></nobr></button>
<button id="vmcsc"></button>
  •     錯誤消息類型      說明
         0發(fā)送至默認的error_log指定位置
         1 發(fā)送到指定的郵件位置
         3發(fā)送至指定的文件位置
    Type de message d'erreur
    Description
    0 Envoyer à l'emplacement spécifié par défaut du journal d'erreurs
    1 Envoyer à l'emplacement de messagerie spécifié
    3Envoyer à l'emplacement de fichier spécifié