[Debug] fix handling deprecated warnings and stacked errors turned into exceptions
This commit is contained in:
parent
19db5f7c4b
commit
95f3276309
@ -154,12 +154,10 @@ class ErrorHandler
|
|||||||
|
|
||||||
self::$loggers['deprecation']->warning($message, array('type' => self::TYPE_DEPRECATION, 'stack' => $stack));
|
self::$loggers['deprecation']->warning($message, array('type' => self::TYPE_DEPRECATION, 'stack' => $stack));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
|
} elseif ($this->displayErrors && error_reporting() & $level && $this->level & $level) {
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
if ($this->displayErrors && error_reporting() & $level && $this->level & $level) {
|
|
||||||
if (self::$stackedErrorLevels) {
|
if (self::$stackedErrorLevels) {
|
||||||
self::$stackedErrors[] = func_get_args();
|
self::$stackedErrors[] = func_get_args();
|
||||||
|
|
||||||
@ -264,22 +262,35 @@ class ErrorHandler
|
|||||||
gc_collect_cycles();
|
gc_collect_cycles();
|
||||||
$error = error_get_last();
|
$error = error_get_last();
|
||||||
|
|
||||||
while (self::$stackedErrorLevels) {
|
// get current exception handler
|
||||||
static::unstackErrors();
|
$exceptionHandler = set_exception_handler('var_dump');
|
||||||
|
restore_exception_handler();
|
||||||
|
|
||||||
|
try {
|
||||||
|
while (self::$stackedErrorLevels) {
|
||||||
|
static::unstackErrors();
|
||||||
|
}
|
||||||
|
} catch (\Exception $exception) {
|
||||||
|
if ($exceptionHandler) {
|
||||||
|
call_user_func($exceptionHandler, $exception);
|
||||||
|
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($this->displayErrors) {
|
||||||
|
ini_set('display_errors', 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
throw $exception;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (null === $error) {
|
if (!$error || !$this->level || !in_array($error['type'], array(E_ERROR, E_CORE_ERROR, E_COMPILE_ERROR, E_PARSE))) {
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
$type = $error['type'];
|
|
||||||
if (0 === $this->level || !in_array($type, array(E_ERROR, E_CORE_ERROR, E_COMPILE_ERROR, E_PARSE))) {
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (isset(self::$loggers['emergency'])) {
|
if (isset(self::$loggers['emergency'])) {
|
||||||
$fatal = array(
|
$fatal = array(
|
||||||
'type' => $type,
|
'type' => $error['type'],
|
||||||
'file' => $error['file'],
|
'file' => $error['file'],
|
||||||
'line' => $error['line'],
|
'line' => $error['line'],
|
||||||
);
|
);
|
||||||
@ -287,14 +298,8 @@ class ErrorHandler
|
|||||||
self::$loggers['emergency']->emergency($error['message'], $fatal);
|
self::$loggers['emergency']->emergency($error['message'], $fatal);
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($this->displayErrors) {
|
if ($this->displayErrors && ($exceptionHandler || self::$fatalHandler)) {
|
||||||
// get current exception handler
|
$this->handleFatalError($exceptionHandler, $error);
|
||||||
$exceptionHandler = set_exception_handler('var_dump');
|
|
||||||
restore_exception_handler();
|
|
||||||
|
|
||||||
if ($exceptionHandler || self::$fatalHandler) {
|
|
||||||
$this->handleFatalError($exceptionHandler, $error);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -134,12 +134,12 @@ class ErrorHandlerTest extends \PHPUnit_Framework_TestCase
|
|||||||
restore_error_handler();
|
restore_error_handler();
|
||||||
|
|
||||||
$handler = ErrorHandler::register(E_USER_DEPRECATED);
|
$handler = ErrorHandler::register(E_USER_DEPRECATED);
|
||||||
$this->assertTrue($handler->handle(E_USER_DEPRECATED, 'foo', 'foo.php', 12, array()));
|
$this->assertFalse($handler->handle(E_USER_DEPRECATED, 'foo', 'foo.php', 12, array()));
|
||||||
|
|
||||||
restore_error_handler();
|
restore_error_handler();
|
||||||
|
|
||||||
$handler = ErrorHandler::register(E_DEPRECATED);
|
$handler = ErrorHandler::register(E_DEPRECATED);
|
||||||
$this->assertTrue($handler->handle(E_DEPRECATED, 'foo', 'foo.php', 12, array()));
|
$this->assertFalse($handler->handle(E_DEPRECATED, 'foo', 'foo.php', 12, array()));
|
||||||
|
|
||||||
restore_error_handler();
|
restore_error_handler();
|
||||||
|
|
||||||
@ -162,7 +162,7 @@ class ErrorHandlerTest extends \PHPUnit_Framework_TestCase
|
|||||||
|
|
||||||
$handler = ErrorHandler::register(E_USER_DEPRECATED);
|
$handler = ErrorHandler::register(E_USER_DEPRECATED);
|
||||||
$handler->setLogger($logger);
|
$handler->setLogger($logger);
|
||||||
$handler->handle(E_USER_DEPRECATED, 'foo', 'foo.php', 12, array());
|
$this->assertTrue($handler->handle(E_USER_DEPRECATED, 'foo', 'foo.php', 12, array()));
|
||||||
|
|
||||||
restore_error_handler();
|
restore_error_handler();
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user