Les erreurs de diagnostic, aussi appelĂ©es erreurs traditionnelles, servent Ă
signaler un certain nombre de conditions diffĂ©rentes, et peuvent ĂȘtre
affichées et/ou enregistrées dans un journal selon les besoins.
Par défaut, PHP signale tous les diagnostics. (Antérieurement à PHP 8.0.0,
les diagnostics E_NOTICE et
E_DEPRECATED n'étaient pas signalés par défaut.)
Contrairement aux erreurs Throwable, la
plupart des erreurs de diagnostic n'interrompent pas le
flux normal d'exécution.
Les diagnostics fatals, tels que E_ERROR, terminent le
script.
Les diagnostics qui sont signalés et ceux qui sont ignorés sont contrÎlés par
la directive php.ini
error_reporting,
ou lors de l'exécution du script en appelant
error_reporting().
Il est fortement recommandé de configurer la directive, car certaines
erreurs peuvent se produire avant que l'exécution du script ne commence.
Note:
Dans un environnement de développement, la directive
error_reportingdevrait toujours ĂȘtre configurĂ©e avecE_ALL, afin d'ĂȘtre informĂ© et de corriger les problĂšmes relevĂ©s par PHP. En production, le niveau de verbositĂ© peut ĂȘtre rĂ©duit ĂE_ALL & ~E_NOTICE & ~E_DEPRECATED, mais dans de nombreux casE_ALLreste appropriĂ©, car il peut avertir en avance de problĂšmes potentiels.
Ce qu'il advient des diagnostics dépend de deux autres directives php.ini.
display_errors
détermine si le diagnostic est affiché dans la sortie du script.
Ceci devrait toujours ĂȘtre dĂ©sactivĂ© dans un environnement de production,
car la sortie peut contenir des informations confidentielles, telles que les mots de
passe de base de données. Il est cependant souvent utile de l'activer lors
du développement, car cela assure un signalement immédiat des problÚmes.
En plus d'afficher les erreurs, PHP peut enregistrer les diagnostics
lorsque la directive
log_errors
est activée. Tous les diagnostics sont alors enregistrés dans le fichier ou
le syslog défini par
error_log.
Ceci peut ĂȘtre extrĂȘmement utile dans un environnement de production, car
les diagnostics sont enregistrés lorsqu'ils se produisent, et des rapports
peuvent ensuite ĂȘtre gĂ©nĂ©rĂ©s Ă partir de ces journaux.
Les diagnostics individuels peuvent ĂȘtre supprimĂ©s Ă l'aide de l'opĂ©rateur
@.
Antérieurement à PHP 8.0.0, il était possible de supprimer des diagnostics critiques qui terminaient l'exécution du script PHP.
Note:
D'une version de PHP Ă l'autre, des diagnostics peuvent ĂȘtre ajoutĂ©s, supprimĂ©s, avoir leur niveau de gravitĂ© modifiĂ© ou ĂȘtre Ă©levĂ©s au rang d'erreur Throwable.
Si la gestion des diagnostics par défaut de PHP ne convient pas, il est
possible de remplacer le gestionnaire par défaut par un gestionnaire
personnalisé, défini avec set_error_handler().
Certains diagnostics, tels que E_ERROR et
E_PARSE, ne peuvent pas ĂȘtre gĂ©rĂ©s de cette maniĂšre
(voir set_error_handler() pour la liste complĂšte).
Les autres peuvent ĂȘtre gĂ©rĂ©s de diverses façons. Par exemple, ceci peut
servir Ă afficher une page d'erreur personnalisĂ©e Ă l'utilisateur, puis Ă
signaler l'erreur de façon plus directe que par un journal, comme en
envoyant un courriel.
Un autre usage typique consiste à élever les erreurs de diagnostic au rang d'exceptions avec ErrorException.
Exemple #1 Ălever les erreurs de diagnostic au rang d'exceptions
<?php
function exceptions_error_handler($severity, $message, $filename, $lineno) {
if (error_reporting() & $severity) {
throw new ErrorException($message, 0, $severity, $filename, $lineno);
}
}
set_error_handler('exceptions_error_handler');Note:
Il est important de vérifier que le niveau de gravité est inclus dans la liste actuelle des diagnostics signalables, sans quoi l'opérateur
@ne fonctionnera plus, car une exception serait lancée pour un diagnostic supprimé.
| Version | Description |
|---|---|
| 8.5.0 | Les erreurs fatales (comme un temps d'exécution maximal dépassé) incluent désormais une trace d'appels dans leur message d'erreur. |