Comment traiter les erreurs PHP qui ne peuvent être interceptées et gérées par script PHP? Impossible ? Pas si sûre !
• E_ERROR
• E_PARSE
• E_CORE_ERROR
• E_CORE_WARNING
• E_COMPILE_ERROR
• E_COMPILE_WARNING
• La plupart des E_STRICT
Attraper les erreurs de ce type est impossible dans un script PHP, puisque que l’interpréteur PHP est considéré instable et stoppé. PHP affiche par défaut un rapport d’erreur. Ces erreurs ne sont pas attrapables avec PHP.
Objectif :
• Comment être informer rapidement (mail par exemple) d'une erreur sur le site,
• Comment maitriser l'affichage du rapport d'erreur PHP, en pensant sécurité
Problématiques :
• La sécurité peut être compromise par l’affichage d’informations indésirables dans le rapport d’erreur de PHP.
• Pour l’aspect sécurité, la solution de désactiver le rapport d’erreur (display_errors = Off) est tout aussi risqué. Le client ne sera pas correctement informé qu’il y a une erreur. Soit la crédibilité du site en prend encor plus un coup que ce n’est déjà fait, soit il risque d’insister et provoquer plus de problèmes.
• Enfin, plus tôt on est informé de ce genre d’erreur, mieux c’est. Hors la configuration PHP propose uniquement un log des erreurs alors qu’un mail serait un minimum pour être informé rapidement.
• Le fichier php.ini peut être inaccessible (par exemple hébergement mutualisé)
Solution, résumé :
La solution que j’ai trouvé consiste à jouer sur la configuration des directives PHP (Rappel : le fichier php.ini, reconfigurable via htaccess ou script PHP), puis à l’aide d’une petite astuce HTML, poursuivre le traitement de l’erreur avec une redirection. Le système a ses limites mais fonctionne plus ou moins et ne demande qu’à être amélioré.
Note :
Il est fort possible que je puisse me tromper sur ces affirmations, et qu’il existe d’autres façons plus fiables et plus simples pour répondre à ces problèmes. Mais dans ce cas l’information est dure à trouver. N’hésitez pas à citer des références.