Verzeichnisstruktur phpBB-3.2.0


Veröffentlicht
06.01.2017

So funktioniert es


Auf das letzte Element klicken. Dies geht jeweils ein Schritt zurück

Auf das Icon klicken, dies öffnet das Verzeichnis. Nochmal klicken schließt das Verzeichnis.
Auf den Verzeichnisnamen klicken, dies zeigt nur das Verzeichnis mit Inhalt an

      (Beispiel Datei-Icons)

Auf das Icon klicken um den Quellcode anzuzeigen

FlattenException.php

Zuletzt modifiziert: 09.10.2024, 12:56 - Dateigröße: 8.08 KiB


 001  <?php
 002   
 003  /*
 004   * This file is part of the Symfony package.
 005   *
 006   * (c) Fabien Potencier <fabien@symfony.com>
 007   *
 008   * For the full copyright and license information, please view the LICENSE
 009   * file that was distributed with this source code.
 010   */
 011   
 012  namespace Symfony\Component\HttpKernel\Exception;
 013   
 014  use Symfony\Component\Debug\Exception\FlattenException as DebugFlattenException;
 015   
 016  /**
 017   * FlattenException wraps a PHP Exception to be able to serialize it.
 018   *
 019   * Basically, this class removes all objects from the trace.
 020   *
 021   * @author Fabien Potencier <fabien@symfony.com>
 022   *
 023   * @deprecated Deprecated in 2.3, to be removed in 3.0. Use the same class from the Debug component instead.
 024   */
 025  class FlattenException
 026  {
 027      private $handler;
 028   
 029      public static function __callStatic($method, $args)
 030      {
 031          if (!method_exists('Symfony\Component\Debug\Exception\FlattenException', $method)) {
 032              throw new \BadMethodCallException(sprintf('Call to undefined method %s::%s()', get_called_class(), $method));
 033          }
 034   
 035          return call_user_func_array(array('Symfony\Component\Debug\Exception\FlattenException', $method), $args);
 036      }
 037   
 038      public function __call($method, $args)
 039      {
 040          if (!isset($this->handler)) {
 041              $this->handler = new DebugFlattenException();
 042          }
 043   
 044          if (!method_exists($this->handler, $method)) {
 045              throw new \BadMethodCallException(sprintf('Call to undefined method %s::%s()', get_class($this), $method));
 046          }
 047   
 048          return call_user_func_array(array($this->handler, $method), $args);
 049      }
 050  }
 051   
 052  namespace Symfony\Component\Debug\Exception;
 053   
 054  use Symfony\Component\HttpKernel\Exception\FlattenException as LegacyFlattenException;
 055  use Symfony\Component\HttpKernel\Exception\HttpExceptionInterface;
 056   
 057  /**
 058   * FlattenException wraps a PHP Exception to be able to serialize it.
 059   *
 060   * Basically, this class removes all objects from the trace.
 061   *
 062   * @author Fabien Potencier <fabien@symfony.com>
 063   */
 064  class FlattenException extends LegacyFlattenException
 065  {
 066      private $message;
 067      private $code;
 068      private $previous;
 069      private $trace;
 070      private $class;
 071      private $statusCode;
 072      private $headers;
 073      private $file;
 074      private $line;
 075   
 076      public static function create(\Exception $exception, $statusCode = null, array $headers = array())
 077      {
 078          $e = new static();
 079          $e->setMessage($exception->getMessage());
 080          $e->setCode($exception->getCode());
 081   
 082          if ($exception instanceof HttpExceptionInterface) {
 083              $statusCode = $exception->getStatusCode();
 084              $headers = array_merge($headers, $exception->getHeaders());
 085          }
 086   
 087          if (null === $statusCode) {
 088              $statusCode = 500;
 089          }
 090   
 091          $e->setStatusCode($statusCode);
 092          $e->setHeaders($headers);
 093          $e->setTraceFromException($exception);
 094          $e->setClass(get_class($exception));
 095          $e->setFile($exception->getFile());
 096          $e->setLine($exception->getLine());
 097   
 098          $previous = $exception->getPrevious();
 099   
 100          if ($previous instanceof \Exception) {
 101              $e->setPrevious(static::create($previous));
 102          } elseif ($previous instanceof \Throwable) {
 103              $e->setPrevious(static::create(new FatalThrowableError($previous)));
 104          }
 105   
 106          return $e;
 107      }
 108   
 109      public function toArray()
 110      {
 111          $exceptions = array();
 112          foreach (array_merge(array($this), $this->getAllPrevious()) as $exception) {
 113              $exceptions[] = array(
 114                  'message' => $exception->getMessage(),
 115                  'class' => $exception->getClass(),
 116                  'trace' => $exception->getTrace(),
 117              );
 118          }
 119   
 120          return $exceptions;
 121      }
 122   
 123      public function getStatusCode()
 124      {
 125          return $this->statusCode;
 126      }
 127   
 128      public function setStatusCode($code)
 129      {
 130          $this->statusCode = $code;
 131      }
 132   
 133      public function getHeaders()
 134      {
 135          return $this->headers;
 136      }
 137   
 138      public function setHeaders(array $headers)
 139      {
 140          $this->headers = $headers;
 141      }
 142   
 143      public function getClass()
 144      {
 145          return $this->class;
 146      }
 147   
 148      public function setClass($class)
 149      {
 150          $this->class = $class;
 151      }
 152   
 153      public function getFile()
 154      {
 155          return $this->file;
 156      }
 157   
 158      public function setFile($file)
 159      {
 160          $this->file = $file;
 161      }
 162   
 163      public function getLine()
 164      {
 165          return $this->line;
 166      }
 167   
 168      public function setLine($line)
 169      {
 170          $this->line = $line;
 171      }
 172   
 173      public function getMessage()
 174      {
 175          return $this->message;
 176      }
 177   
 178      public function setMessage($message)
 179      {
 180          $this->message = $message;
 181      }
 182   
 183      public function getCode()
 184      {
 185          return $this->code;
 186      }
 187   
 188      public function setCode($code)
 189      {
 190          $this->code = $code;
 191      }
 192   
 193      public function getPrevious()
 194      {
 195          return $this->previous;
 196      }
 197   
 198      public function setPrevious(FlattenException $previous)
 199      {
 200          $this->previous = $previous;
 201      }
 202   
 203      public function getAllPrevious()
 204      {
 205          $exceptions = array();
 206          $e = $this;
 207          while ($e = $e->getPrevious()) {
 208              $exceptions[] = $e;
 209          }
 210   
 211          return $exceptions;
 212      }
 213   
 214      public function getTrace()
 215      {
 216          return $this->trace;
 217      }
 218   
 219      public function setTraceFromException(\Exception $exception)
 220      {
 221          $this->setTrace($exception->getTrace(), $exception->getFile(), $exception->getLine());
 222      }
 223   
 224      public function setTrace($trace, $file, $line)
 225      {
 226          $this->trace = array();
 227          $this->trace[] = array(
 228              'namespace' => '',
 229              'short_class' => '',
 230              'class' => '',
 231              'type' => '',
 232              'function' => '',
 233              'file' => $file,
 234              'line' => $line,
 235              'args' => array(),
 236          );
 237          foreach ($trace as $entry) {
 238              $class = '';
 239              $namespace = '';
 240              if (isset($entry['class'])) {
 241                  $parts = explode('\\', $entry['class']);
 242                  $class = array_pop($parts);
 243                  $namespace = implode('\\', $parts);
 244              }
 245   
 246              $this->trace[] = array(
 247                  'namespace' => $namespace,
 248                  'short_class' => $class,
 249                  'class' => isset($entry['class']) ? $entry['class'] : '',
 250                  'type' => isset($entry['type']) ? $entry['type'] : '',
 251                  'function' => isset($entry['function']) ? $entry['function'] : null,
 252                  'file' => isset($entry['file']) ? $entry['file'] : null,
 253                  'line' => isset($entry['line']) ? $entry['line'] : null,
 254                  'args' => isset($entry['args']) ? $this->flattenArgs($entry['args']) : array(),
 255              );
 256          }
 257      }
 258   
 259      private function flattenArgs($args, $level = 0, &$count = 0)
 260      {
 261          $result = array();
 262          foreach ($args as $key => $value) {
 263              if (++$count > 1e4) {
 264                  return array('array', '*SKIPPED over 10000 entries*');
 265              }
 266              if ($value instanceof \__PHP_Incomplete_Class) {
 267                  // is_object() returns false on PHP<=7.1
 268                  $result[$key] = array('incomplete-object', $this->getClassNameFromIncomplete($value));
 269              } elseif (is_object($value)) {
 270                  $result[$key] = array('object', get_class($value));
 271              } elseif (is_array($value)) {
 272                  if ($level > 10) {
 273                      $result[$key] = array('array', '*DEEP NESTED ARRAY*');
 274                  } else {
 275                      $result[$key] = array('array', $this->flattenArgs($value, $level + 1, $count));
 276                  }
 277              } elseif (null === $value) {
 278                  $result[$key] = array('null', null);
 279              } elseif (is_bool($value)) {
 280                  $result[$key] = array('boolean', $value);
 281              } elseif (is_resource($value)) {
 282                  $result[$key] = array('resource', get_resource_type($value));
 283              } else {
 284                  $result[$key] = array('string', (string) $value);
 285              }
 286          }
 287   
 288          return $result;
 289      }
 290   
 291      private function getClassNameFromIncomplete(\__PHP_Incomplete_Class $value)
 292      {
 293          $array = new \ArrayObject($value);
 294   
 295          return $array['__PHP_Incomplete_Class_Name'];
 296      }
 297  }
 298