While looking through some old code I found this trick I once used for restoring the built-in error handler:
<?php
// Unwind the error handler stack until we're back at the built-in error handler.
function unset_error_handler()
{
while (set_error_handler(create_function('$errno,$errstr', 'return false;'))) {
// Unset the error handler we just set.
restore_error_handler();
// Unset the previous error handler.
restore_error_handler();
}
// Restore the built-in error handler.
restore_error_handler();
}
?>
restore_error_handler
(PHP 4 >= 4.0.1, PHP 5)
restore_error_handler — Réactive l'ancienne fonction de gestion des erreurs
Description
bool restore_error_handler
( void
)
Utilisée après avoir modifié la fonction de gestion des erreurs, grâce à set_error_handler(), restore_error_handler() permet de réutiliser l'ancienne version de gestion des erreurs (qui peut être la fonction PHP par défaut, ou une autre fonction utilisateur).
Valeurs de retour
Cette fonction retourne toujours TRUE.
Exemples
Exemple #1 Exemple avec restore_error_handler()
Si unserialize() cause une erreur, alors le gestionnaire d'erreurs original est restauré.
<?php
function unserialize_handler($errno, $errstr)
{
echo "Valeur incorrectement linéarisée.\n";
}
$serialized = 'foo';
set_error_handler('unserialize_handler');
$original = unserialize($serialized);
restore_error_handler();
?>
L'exemple ci-dessus va afficher :
Valeur incorrectement linéarisée.
Notes
Note:
L'appel de la fonction restore_error_handler() depuis la fonction error_handler est ignoré.
Voir aussi
- error_reporting() - Fixe le niveau de rapport d'erreurs PHP
- set_error_handler() - Spécifie une fonction utilisateur comme gestionnaire d'erreurs
- restore_exception_handler() - Réactive l'ancienne fonction de gestion d'exceptions
- trigger_error() - Déclenche une erreur utilisateur
Timo Frenay ¶
3 years ago
edgarinvillegas at hotmail dot com ¶
5 years ago
Isolde is kind of wrong. The error handlers are stacked with set_error_handler(), and popped with restore_error_handler(). Here i put an example:
<?php
mysql_connect("inexistent"); //Generate an error. The actual error handler is set by default
function foo1() {echo "<br>Error foo1<br>";}
function foo2() {echo "<br>Error foo2<br>";}
function foo3() {echo "<br>Error foo3<br>";}
set_error_handler("foo1"); //current error handler: foo1
set_error_handler("foo2"); //current error handler: foo2
set_error_handler("foo3"); //current error handler: foo3
mysql_connect("inexistent");
restore_error_handler(); //now, current error handler: foo2
mysql_connect("inexistent");
restore_error_handler(); //now, current error handler: foo1
mysql_connect("inexistent");
restore_error_handler(); //now current error handler: default handler
mysql_connect("inexistent");
restore_error_handler(); //now current error handler: default handler (The stack can't pop more)
?>
lsole at maresme dot net ¶
9 years ago
As the docs say, restore_error_handler() revert to the *previous error handler*... even if it is the same. A bug made me set twice my custom error handler and later when I was calling restore_error_handler() to restore the built-in handler nothing seemed to happen... this puzzled me for a while!
webmaster at travian dot lu ¶
1 year ago
If you don't know how often you'd need to call restore_error_handler() to restore the built-in error handler, just do:
<?php
set_error_handler(function() {
return false;
});
?>
sebagr gmail com ¶
4 years ago
I think what Isole wanted to say is that if you push the same error handler twice, then you'll need to call restore_error_handler() twice if you want to get rid of it:
<?php
function custom_error_handler(){
echo 'My error handler';
return false;
}
set_error_handler('custom_error_handler'); // Stack is: <default error handler> | custom_error_handler
set_error_handler('custom_error_handler'); // Stack is: <default error handler> | custom_error_handler | custom_error_handler
trigger_error('error', E_USER_WARNING); // Will print 'My error handler';
restore_error_handler(); // The stack is <default error handler> | custom_error_handler
trigger_error('error', E_USER_WARNING); // Will still print 'My error handler', since the stack is still dirty with our first custom_error_handler.
restore_error_handler(); // The stack is <default error handler>
trigger_error('error', E_USER_WARNING); // Now this will trigger the default error handler.
?>
