错误处理 函数
在线手册:中文  英文

restore_error_handler

(PHP 4 >= 4.0.1, PHP 5)

restore_error_handler还原之前的错误处理函数

说明

bool restore_error_handler ( void )

在使用 set_error_handler() 改变错误处理函数之后,此函数可以 用于还原之前的错误处理程序(可以是内置的或者也可以是用户所定义的函数)。

返回值

该函数总是返回 TRUE

范例

Example #1 restore_error_handler() 范例

如果是 unserialize() 导致了一个错误,接下来 会恢复原来的错误处理函数。

<?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.

注释

Note:

如果在 error_handler 函数中调用 restore_error_handler() 则会被忽略。

参见


错误处理 函数
在线手册:中文  英文

用户评论:

webmaster at travian dot lu (2011-07-01 09:27:47)

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;
});

?>

Timo Frenay (2009-08-31 04:23:26)

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 (2008-05-22 08:54:19)

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 (2008-03-28 08:21:15)

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 (2004-03-14 11:57:19)

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!

易百教程