Maison  >  Article  >  développement back-end  >  Comment détecter les erreurs « Taille de mémoire autorisée épuisée » avec élégance en PHP ?

Comment détecter les erreurs « Taille de mémoire autorisée épuisée » avec élégance en PHP ?

Barbara Streisand
Barbara Streisandoriginal
2024-10-24 16:50:02445parcourir

How to Catch 'Allowed Memory Size Exhausted' Errors Gracefully in PHP?

Détection gracieuse des erreurs « Taille de mémoire autorisée épuisée » en PHP

La gestion des erreurs fatales, telles que les erreurs « Taille de mémoire autorisée épuisée », peut être crucial pour garantir la stabilité et la convivialité des applications PHP. Bien qu'augmenter la limite de mémoire avec ini_set() puisse être une solution rapide, ce n'est pas toujours la meilleure option.

Pour détecter plus efficacement les erreurs fatales, pensez à utiliser register_shutdown_function(). En enregistrant une fonction de rappel à l'aide de cette méthode, vous pouvez rechercher les erreurs à l'aide de error_get_last() à la fin du script. Voici un exemple :

<code class="php">ini_set('display_errors', false);
error_reporting(-1);

set_error_handler(function($code, $string, $file, $line) {
    throw new ErrorException($string, null, $code, $file, $line);
});

register_shutdown_function(function() {
    $error = error_get_last();
    if (null !== $error) {
        echo 'Caught at shutdown';
    }
});

try {
    while (true) {
        $data .= str_repeat('#', PHP_INT_MAX);
    }
} catch (\Exception $exception) {
    echo 'Caught in try/catch';
}</code>

Lors de l'exécution de ce code, vous remarquerez la sortie "Caught at shutdown" car des erreurs fatales telles que "Taille de mémoire autorisée épuisée" terminent le script, ce qui oblige la fonction d'arrêt à intercepter le error.

Vous pouvez accéder aux détails de l'erreur dans le tableau $error dans la fonction d'arrêt et adapter votre réponse en conséquence. Par exemple, vous pouvez rediriger la requête vers une autre URL ou essayer de traiter la requête avec des paramètres différents.

Bien que la gestion des erreurs avec register_shutdown_function() puisse être efficace pour détecter les erreurs fatales, il est recommandé de définir error_reporting() sur une valeur élevée. (-1) et utilisez la gestion des erreurs avec set_error_handler() et ErrorException pour toutes les autres erreurs.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn