You are here

public static function ErrorHandler::handleFatalError in Zircon Profile 8

Same name and namespace in other branches
  1. 8.0 vendor/symfony/debug/ErrorHandler.php \Symfony\Component\Debug\ErrorHandler::handleFatalError()

Shutdown registered function for handling PHP fatal errors.

@internal

Parameters

array $error An array as returned by error_get_last():

2 calls to ErrorHandler::handleFatalError()
ErrorHandler::handleError in vendor/symfony/debug/ErrorHandler.php
Handles errors by filtering then logging them according to the configured bit fields.
ErrorHandler::handleFatal in vendor/symfony/debug/ErrorHandler.php
Handles PHP fatal errors.

File

vendor/symfony/debug/ErrorHandler.php, line 522

Class

ErrorHandler
A generic ErrorHandler for the PHP engine.

Namespace

Symfony\Component\Debug

Code

public static function handleFatalError(array $error = null) {
  if (null === self::$reservedMemory) {
    return;
  }
  self::$reservedMemory = null;
  $handler = set_error_handler('var_dump', 0);
  $handler = is_array($handler) ? $handler[0] : null;
  restore_error_handler();
  if (!$handler instanceof self) {
    return;
  }
  if (null === $error) {
    $error = error_get_last();
  }
  try {
    while (self::$stackedErrorLevels) {
      static::unstackErrors();
    }
  } catch (\Exception $exception) {

    // Handled below
  }
  if ($error && ($error['type'] &= E_PARSE | E_ERROR | E_CORE_ERROR | E_COMPILE_ERROR)) {

    // Let's not throw anymore but keep logging
    $handler
      ->throwAt(0, true);
    $trace = isset($error['backtrace']) ? $error['backtrace'] : null;
    if (0 === strpos($error['message'], 'Allowed memory') || 0 === strpos($error['message'], 'Out of memory')) {
      $exception = new OutOfMemoryException($handler->levels[$error['type']] . ': ' . $error['message'], 0, $error['type'], $error['file'], $error['line'], 2, false, $trace);
    }
    else {
      $exception = new FatalErrorException($handler->levels[$error['type']] . ': ' . $error['message'], 0, $error['type'], $error['file'], $error['line'], 2, true, $trace);
    }
  }
  elseif (!isset($exception)) {
    return;
  }
  try {
    $handler
      ->handleException($exception, $error);
  } catch (FatalErrorException $e) {

    // Ignore this re-throw
  }
}