PHP Doku:: Rekonstruiert die zuvor benutzte Fehlerbehandlungsfunktion - function.restore-error-handler.html

Verlauf / Chronik / History: (3) anzeigen

Sie sind hier:
Doku-StartseitePHP-HandbuchFunktionsreferenzDas Verhalten von PHP beeinflussenFehlerbehandlung und ProtokollierungFehlerbehandlungsfunktionenrestore_error_handler

Ein Service von Reinhard Neidl - Webprogrammierung.

Fehlerbehandlungsfunktionen

<<error_reporting

restore_exception_handler>>

restore_error_handler

(PHP 4 >= 4.0.1, PHP 5)

restore_error_handler Rekonstruiert die zuvor benutzte Fehlerbehandlungsfunktion

Beschreibung

bool restore_error_handler ( void )

Diese Funktion wird benutzt, um eine mit set_error_handler() gesetzte Fehlerbehandlungsfunktion wieder zurückzusetzen und zur zuvor benutzten Fehlerbehandlung zurückzukehren. (Dies kann entweder eine eingebaute oder eine benutzerdefinierte Funktion sein.)

Rückgabewerte

Diese Funktion gibt immer TRUE zurück.

Beispiele

Beispiel #1 restore_error_handler() Beispiel

Prüft ob unserialize() einen Fehler verursacht, danach wird der ursprüngliche Error-Handler wiederhergestellt.

<?php
function unserialize_handler($errno$errstr)
{
    echo 
"Ungültiger serialisierter Wert.\n";
}

$serialized 'foo';
set_error_handler('unserialize_handler');
$original unserialize($serialized);
restore_error_handler();
?>

Das oben gezeigte Beispiel erzeugt folgende Ausgabe:

Ungültiger serialisierter Wert.

Anmerkungen

Hinweis:

Calling restore_error_handler() from the error_handler function is ignored.

Siehe auch


4 BenutzerBeiträge:
- Beiträge aktualisieren...
Timo Frenay
31.08.2009 13:23
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();
    }
?>
sebagr gmail com
22.05.2008 17:54
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.

?>
edgarinvillegas at hotmail dot com
28.03.2008 17:21
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
14.03.2004 20:57
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!



PHP Powered Diese Seite bei php.net
The PHP manual text and comments are covered by the Creative Commons Attribution 3.0 License © the PHP Documentation Group - Impressum - mail("TO:Reinhard Neidl",...)