restore_error_handler

(PHP 4 >= 4.0.1, PHP 5)

restore_error_handler — Restores the previous error handler function

Описание

bool restore_error_handler ( void )

Used after changing the error handler function using set_error_handler(), to revert to the previous error handler (which could be the built-in or a user defined function).

Возвращаемые значения

This function always returns TRUE.

Примеры

Пример #1 restore_error_handler() example

Decide if unserialize() caused an error, then restore the original error handler.

<?php
function unserialize_handler($errno$errstr)
{
    echo 
"Invalid serialized value.\n";
}

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

Результат выполнения данного примера:

Invalid serialized value.

Примечания

Замечание: Calling restore_error_handler() from the error_handler function is ignored.

Коментарии

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!
2004-03-14 13:57:19
http://php5.kiev.ua/manual/ru/function.restore-error-handler.html
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)
?>
2008-03-28 10:21:15
http://php5.kiev.ua/manual/ru/function.restore-error-handler.html
Автор:
Works also for restoring nested error handlers:

<?php

error_reporting
(E_ALL);

echo 
'<pre>';

set_error_handler(function($errno$errstr$errfile$errline, array $errcontext) {
    echo 
'ErrorHandler 1: ' $errstr PHP_EOL;
});

trigger_error('Error 1');

set_error_handler(function($errno$errstr$errfile$errline, array $errcontext) {
    echo 
'ErrorHandler 2: ' $errstr PHP_EOL;
});

trigger_error('Error 2');

restore_error_handler();

trigger_error('Error 3');

restore_error_handler();

trigger_error('Error 4');

?>
2015-04-27 13:39:28
http://php5.kiev.ua/manual/ru/function.restore-error-handler.html
Calling restore_error_handler from within an error handler might result in unexpected behaviour:

<?php
error_reporting
(0);

set_error_handler('handleError1');
trigger_error('1-stack:h1');

set_error_handler('handleError2');
trigger_error('2-stack:h1,h2');

trigger_error('6-stack:h1,h2');
trigger_error('7-stack:h1,h2');

function 
handleError1($code$message$file ''$line 0$context = array())
{
    echo 
__METHOD__ ' ' $message PHP_EOL;
}

function 
handleError2($code$message$file ''$line 0$context = array())
{
   
trigger_error('3-DEFAULT'); // This will use the php's default error handler

   
echo  __METHOD__ ' ' $message PHP_EOL;

   
set_error_handler('handleError3');
   
trigger_error('4-stack:h1,h2,h3');

   
restore_error_handler(); // This will restore the handleError1 instead of the default error handler
   
trigger_error('5-DEFAULT');
}

function 
handleError3($code$message$file ''$line 0$context = array())
{
    echo 
__METHOD__ ' ' $message PHP_EOL;
}

?>

The above code will output:

handleError1 1-stack:h1
handleError2 2-stack:h1,h2
handleError3 4-stack:h1,h2,h3
handleError1 5-DEFAULT
handleError1 6-stack:h1,h2
handleError1 7-stack:h1,h2

The following workaround can be used:

<?php

error_reporting
(0);

set_error_handler('handleError1');
trigger_error('1-stack:h1');

set_error_handler('handleError2');
trigger_error('2-stack:h1,h2');

trigger_error('6-stack:h1,h2');
trigger_error('7-stack:h1,h2');

function 
handleError1($code$message$file ''$line 0$context = array())
{
    echo 
__METHOD__ ' ' $message PHP_EOL;
}

function 
handleError2($code$message$file ''$line 0$context = [])
{
   
restore_error_handler(); // This will restore the previous error handler
   
set_error_handler('count'0); // Set a dummy method for error handling, it will never be called because $error_type = 0
   
try
    {
       
trigger_error('3-DEFAULT');

        echo 
__METHOD__ ' ' $message PHP_EOL;

       
set_error_handler('handleError3');
       
trigger_error('4-stack:h1,h2,h3');

       
restore_error_handler();
       
trigger_error('5-DEFAULT');
    }
    finally
    {
       
restore_error_handler(); // Restore the previous error handler
       
set_error_handler('handleError2'); // Set the current error handler again
   
}
}

function 
handleError3($code$message$file ''$line 0$context = [])
{
    echo 
__METHOD__ ' ' $message PHP_EOL;
}
?>

which will output:

handleError1 1-stack:h1
handleError2 2-stack:h1,h2
handleError3 4-stack:h1,h2,h3
handleError2 6-stack:h1,h2
handleError3 4-stack:h1,h2,h3
handleError2 7-stack:h1,h2
handleError3 4-stack:h1,h2,h3
2017-03-27 16:45:03
http://php5.kiev.ua/manual/ru/function.restore-error-handler.html

    Поддержать сайт на родительском проекте КГБ