Comment attraper une erreur fatale PHP (E_ERROR) : pièges et solutions

Formateur Python en ligne pour débutants

Apprenez Python facilement sans surcharge théorique. Résolvez des tâches pratiques avec vérification automatique et écrivez du code directement dans le navigateur.

Start Course

Comment attraper une erreur fatale PHP (E_ERROR) sans perdre la tête

\n\n

Avez-vous déjà vu cela ? Votre site PHP affiche une page blanche sans aucune erreur. Ou pire encore, un message effrayant Fatal error: Uncaught Error.... Si vous êtes un développeur qui travaille avec PHP, vous avez rencontré E_ERROR — le type d'erreur le plus désagréable. Contrairement aux avertissements (Warnings) ou aux notifications (Notices), une erreur fatale arrête complètement l'exécution du script. Et le plus frustrant : le bloc standard try...catch ne l'attrape pas.

\n\n

Dans cet article, nous allons voir comment intercepter correctement les erreurs fatales PHP, pourquoi les méthodes habituelles ne fonctionnent pas, et comment rendre votre code plus robuste. Ce n'est pas que de la théorie — nous allons écrire plusieurs exemples concrets que vous pourrez appliquer immédiatement à vos projets.

\n\n

Pourquoi try...catch ne sauve pas de E_ERROR ?

\n\n

Dissipons tout de suite l'illusion : try...catch en PHP est conçu pour gérer les exceptions (Exceptions). Or E_ERROR est une erreur (Error). Ce sont des entités différentes. PHP avant la version 7.0 ne permettait pas du tout d'attraper les erreurs fatales. À partir de PHP 7, la classe Error est apparue, qui, comme Exception, implémente l'interface Throwable. Mais cela ne signifie pas que n'importe quel E_ERROR devient automatiquement une exception. Par exemple, une erreur de mémoire insuffisante (Out of memory) ou l'appel d'une méthode inexistante sont toujours des erreurs fatales qui ne peuvent pas toujours être interceptées via try...catch.

\n\n

Voici un exemple simple :

\n\n
try {\n    $obj = new NonExistentClass(); // Cela déclenchera E_ERROR\n} catch (Throwable $e) {\n    echo 'Attrapé : ' . $e->getMessage();\n}
\n\n

En PHP 7+, ce code fonctionnera car Throwable inclut Error. Mais si l'erreur se produit lors de la phase de compilation (par exemple, une erreur de syntaxe) ou dans la phase d'arrêt (shutdown), try...catch est inutile.

\n\n

Top 3 des erreurs fatales PHP et comment les éviter

\n\n

1. Appel d'une méthode ou d'une classe inexistante

\n\n

L'erreur fatale la plus courante est Call to undefined method ou Class not found. Elle survient lorsque vous essayez d'appeler une méthode qui n'existe pas, ou d'utiliser une classe qui n'est pas chargée.

\n\n

Comment l'éviter :

\n
    \n
  • Utilisez toujours l'autochargement des classes (spl_autoload_register ou Composer).
  • \n
  • Vérifiez l'existence d'une méthode avec method_exists().
  • \n
\n\n
if (method_exists($object, 'someMethod')) {\n    $object->someMethod();\n} else {\n    // gestion\n}
\n\n

2. Dépassement de mémoire (Allowed memory size exhausted)

\n\n

L'erreur Allowed memory size of X bytes exhausted est une erreur fatale qui se produit lorsque le script consomme plus de mémoire que ce qui est autorisé. Elle ne peut pas être interceptée de manière classique.

\n\n

Comment l'éviter :

\n
    \n
  • Optimisez les requêtes vers la base de données.
  • \n
  • Utilisez des générateurs (yield) pour traiter de grands tableaux.
  • \n
  • Augmentez la limite de mémoire dans php.ini ou via ini_set('memory_limit', '256M').
  • \n
\n\n

3. Dépassement du temps d'exécution (Maximum execution time exceeded)

\n\n

Bien que cette erreur ne soit pas toujours fatale, dans certaines configurations, elle arrête complètement l'exécution du script.

\n\n

Comment l'éviter :

\n
    \n
  • Utilisez set_time_limit(0) pour les scripts longs.
  • \n
  • Divisez les opérations lourdes en parties.
  • \n
\n\n

Comment attraper une erreur fatale PHP : 3 méthodes éprouvées

\n\n

Passons maintenant à l'essentiel. Il existe plusieurs techniques qui permettent d'intercepter E_ERROR et d'exécuter du code avant que le script ne meure.

\n\n

Méthode 1. Utilisation de register_shutdown_function()

Blogs

Book Recommendations