Handler d'erreurs global
QuietGuard\Monitor\ErrorHandler branche les handlers globaux de PHP afin qu'un hôte PHP simple, sans pipeline d'exceptions de framework, remonte tout de même les erreurs non capturées. Les frameworks (Laravel, Symfony) ont leurs propres hooks et ne doivent pas l'appeler.
Enregistrement
ErrorHandler::register() est un unique appel statique qui prend un Reporter configuré :
Appelez-le une fois, le plus tôt possible dans votre bootstrap, après la construction du Reporter.
Ce qu'il enregistre
register() câble trois hooks globaux :
set_exception_handler, toutThrowablenon capturé est envoyé via$reporter->reportException($e). Le handler chaîne : si un autre handler d'exceptions global était enregistré avantErrorHandler::register(), il s'exécute toujours après que l'exception a été remontée (le monitoring remonte d'abord, puis délègue). En l'absence de handler précédent, l'exception (message, fichier:ligne et stack trace) est écrite danserror_log, à l'identique de ce que le comportement par défaut de PHP aurait consigné : installer le monitoring ne supprime donc jamais la trace locale du crash côté hôte.set_error_handler, une erreur PHP levée est encapsulée dans uneErrorExceptionpuis remontée. Il vérifie d'aborderror_reporting() & $severity, de sorte que les valeurs supprimées par@ou en dessous du niveauerror_reportingcourant sont ignorées. Il renvoie ensuitefalsepour que la gestion d'erreurs normale de PHP s'exécute quand même.register_shutdown_function, à l'arrêt,error_get_last()est inspecté et, s'il s'agit d'un type fatal (E_ERROR,E_PARSE,E_CORE_ERROR,E_COMPILE_ERROR), uneErrorExceptionest remontée. Cela capture les fatales que le handler d'erreurs ne peut pas intercepter.
Tous les chemins passent par le Reporter, qui ne lève jamais d'exception : enregistrer ces handlers ne peut donc pas casser l'hôte.
Un bootstrap PHP minimal
Le SDK Laravel, le bundle Symfony et le plugin WordPress n'utilisent pasErrorHandler: Laravel et Symfony branchent leurs propres pipelines d'exceptions, et le plugin WordPress s'intègre à WordPress. N'utilisezErrorHandlerque dans un hôte dépourvu de son propre pipeline d'exceptions.
Vous lisez la documentation PHP Core v1.0.