[ Index ] |
PHP Cross Reference of phpBB-3.3.14-deutsch |
[Summary view] [Print] [Text view]
1 <?php 2 3 /* 4 * This file is part of the Symfony package. 5 * 6 * (c) Fabien Potencier <fabien@symfony.com> 7 * 8 * For the full copyright and license information, please view the LICENSE 9 * file that was distributed with this source code. 10 */ 11 12 namespace Symfony\Component\HttpKernel\EventListener; 13 14 use Psr\Log\LoggerInterface; 15 use Symfony\Component\Console\ConsoleEvents; 16 use Symfony\Component\Console\Event\ConsoleEvent; 17 use Symfony\Component\Console\Output\ConsoleOutputInterface; 18 use Symfony\Component\Debug\ErrorHandler; 19 use Symfony\Component\Debug\ExceptionHandler; 20 use Symfony\Component\EventDispatcher\Event; 21 use Symfony\Component\EventDispatcher\EventSubscriberInterface; 22 use Symfony\Component\HttpKernel\Debug\FileLinkFormatter; 23 use Symfony\Component\HttpKernel\Event\KernelEvent; 24 use Symfony\Component\HttpKernel\KernelEvents; 25 26 /** 27 * Configures errors and exceptions handlers. 28 * 29 * @author Nicolas Grekas <p@tchwork.com> 30 */ 31 class DebugHandlersListener implements EventSubscriberInterface 32 { 33 private $exceptionHandler; 34 private $logger; 35 private $levels; 36 private $throwAt; 37 private $scream; 38 private $fileLinkFormat; 39 private $scope; 40 private $firstCall = true; 41 private $hasTerminatedWithException; 42 43 /** 44 * @param callable|null $exceptionHandler A handler that will be called on Exception 45 * @param LoggerInterface|null $logger A PSR-3 logger 46 * @param array|int $levels An array map of E_* to LogLevel::* or an integer bit field of E_* constants 47 * @param int|null $throwAt Thrown errors in a bit field of E_* constants, or null to keep the current value 48 * @param bool $scream Enables/disables screaming mode, where even silenced errors are logged 49 * @param string|FileLinkFormatter|null $fileLinkFormat The format for links to source files 50 * @param bool $scope Enables/disables scoping mode 51 */ 52 public function __construct(callable $exceptionHandler = null, LoggerInterface $logger = null, $levels = \E_ALL, $throwAt = \E_ALL, $scream = true, $fileLinkFormat = null, $scope = true) 53 { 54 $this->exceptionHandler = $exceptionHandler; 55 $this->logger = $logger; 56 $this->levels = null === $levels ? \E_ALL : $levels; 57 $this->throwAt = is_numeric($throwAt) ? (int) $throwAt : (null === $throwAt ? null : ($throwAt ? \E_ALL : null)); 58 $this->scream = (bool) $scream; 59 $this->fileLinkFormat = $fileLinkFormat; 60 $this->scope = (bool) $scope; 61 } 62 63 /** 64 * Configures the error handler. 65 */ 66 public function configure(Event $event = null) 67 { 68 if ($event instanceof ConsoleEvent && !\in_array(\PHP_SAPI, ['cli', 'phpdbg'], true)) { 69 return; 70 } 71 if (!$event instanceof KernelEvent ? !$this->firstCall : !$event->isMasterRequest()) { 72 return; 73 } 74 $this->firstCall = $this->hasTerminatedWithException = false; 75 76 $handler = set_exception_handler('var_dump'); 77 $handler = \is_array($handler) ? $handler[0] : null; 78 restore_exception_handler(); 79 80 if ($this->logger || null !== $this->throwAt) { 81 if ($handler instanceof ErrorHandler) { 82 if ($this->logger) { 83 $handler->setDefaultLogger($this->logger, $this->levels); 84 if (\is_array($this->levels)) { 85 $levels = 0; 86 foreach ($this->levels as $type => $log) { 87 $levels |= $type; 88 } 89 } else { 90 $levels = $this->levels; 91 } 92 if ($this->scream) { 93 $handler->screamAt($levels); 94 } 95 if ($this->scope) { 96 $handler->scopeAt($levels & ~\E_USER_DEPRECATED & ~\E_DEPRECATED); 97 } else { 98 $handler->scopeAt(0, true); 99 } 100 $this->logger = $this->levels = null; 101 } 102 if (null !== $this->throwAt) { 103 $handler->throwAt($this->throwAt, true); 104 } 105 } 106 } 107 if (!$this->exceptionHandler) { 108 if ($event instanceof KernelEvent) { 109 if (method_exists($kernel = $event->getKernel(), 'terminateWithException')) { 110 $request = $event->getRequest(); 111 $hasRun = &$this->hasTerminatedWithException; 112 $this->exceptionHandler = static function (\Exception $e) use ($kernel, $request, &$hasRun) { 113 if ($hasRun) { 114 throw $e; 115 } 116 $hasRun = true; 117 $kernel->terminateWithException($e, $request); 118 }; 119 } 120 } elseif ($event instanceof ConsoleEvent && $app = $event->getCommand()->getApplication()) { 121 $output = $event->getOutput(); 122 if ($output instanceof ConsoleOutputInterface) { 123 $output = $output->getErrorOutput(); 124 } 125 $this->exceptionHandler = function ($e) use ($app, $output) { 126 $app->renderException($e, $output); 127 }; 128 } 129 } 130 if ($this->exceptionHandler) { 131 if ($handler instanceof ErrorHandler) { 132 $h = $handler->setExceptionHandler('var_dump'); 133 if (\is_array($h) && $h[0] instanceof ExceptionHandler) { 134 $handler->setExceptionHandler($h); 135 $handler = $h[0]; 136 } else { 137 $handler->setExceptionHandler($this->exceptionHandler); 138 } 139 } 140 if ($handler instanceof ExceptionHandler) { 141 $handler->setHandler($this->exceptionHandler); 142 if (null !== $this->fileLinkFormat) { 143 $handler->setFileLinkFormat($this->fileLinkFormat); 144 } 145 } 146 $this->exceptionHandler = null; 147 } 148 } 149 150 public static function getSubscribedEvents() 151 { 152 $events = [KernelEvents::REQUEST => ['configure', 2048]]; 153 154 if (\defined('Symfony\Component\Console\ConsoleEvents::COMMAND')) { 155 $events[ConsoleEvents::COMMAND] = ['configure', 2048]; 156 } 157 158 return $events; 159 } 160 }
title
Description
Body
title
Description
Body
title
Description
Body
title
Body
Generated: Mon Nov 25 19:05:08 2024 | Cross-referenced by PHPXref 0.7.1 |