PHP Conference Fukuoka 2025

restore_error_handler

(PHP 4 >= 4.0.1, PHP 5, PHP 7, PHP 8)

restore_error_handler Восстанавливает предыдущую функцию обработчика ошибок

Описание

restore_error_handler(): true

Функцию вызывают после изменения обработчика ошибок функцией set_error_handler(), чтобы вернуться к предыдущему обработчику, которым станет или пользовательская функция обработки ошибок, если такую определили, или встроенный обработчик.

Список параметров

Сигнатура функции не содержит параметров.

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

Функция возвращает логическое значение true.

Примеры

Пример #1 Пример восстановления предыдущего обработчика ошибок функцией restore_error_handler()

Пример определяет, вызвала ли ошибку функция unserialize(), а затем восстанавливает исходный обработчик ошибок.

<?php

function unserialize_handler($errno, $errstr)
{
echo
"Недопустимое сериализованное значение.\n";
}

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

?>

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

Недопустимое сериализованное значение.

Смотрите также

  • error_reporting() - Определяет, о каких PHP-ошибках сообщать
  • set_error_handler() - Устанавливает пользовательский обработчик ошибок
  • get_error_handler() - Получает пользовательскую функцию обработчика ошибок
  • restore_exception_handler() - Восстанавливает предыдущую функцию обработчика исключений
  • trigger_error() - Генерирует предупреждение, уведомление или сообщение об ошибке на уровне пользователя

Добавить

Примечания пользователей 4 notes

up
25
edgarinvillegas at hotmail dot com
17 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)?>
up
0
masterada at gmail dot com
8 years ago
Calling restore_error_handler from within an error handler might result in unexpected behaviour:<?phperror_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:h1handleError2 2-stack:h1,h2handleError3 4-stack:h1,h2,h3handleError1 5-DEFAULThandleError1 6-stack:h1,h2handleError1 7-stack:h1,h2The following workaround can be used:<?phperror_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:h1handleError2 2-stack:h1,h2handleError3 4-stack:h1,h2,h3handleError2 6-stack:h1,h2handleError3 4-stack:h1,h2,h3handleError2 7-stack:h1,h2handleError3 4-stack:h1,h2,h3
up
0
lsole at maresme dot net
21 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!
up
-1
TiMESPLiNTER
10 years ago
Works also for restoring nested error handlers:<?phperror_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');?>
To Top