Verzeichnisstruktur phpBB-3.1.0


Veröffentlicht
27.10.2014

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

Error.php

Zuletzt modifiziert: 09.10.2024, 12:57 - Dateigröße: 7.18 KiB


 001  <?php
 002   
 003  /*
 004   * This file is part of Twig.
 005   *
 006   * (c) 2009 Fabien Potencier
 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  /**
 013   * Twig base exception.
 014   *
 015   * This exception class and its children must only be used when
 016   * an error occurs during the loading of a template, when a syntax error
 017   * is detected in a template, or when rendering a template. Other
 018   * errors must use regular PHP exception classes (like when the template
 019   * cache directory is not writable for instance).
 020   *
 021   * To help debugging template issues, this class tracks the original template
 022   * name and line where the error occurred.
 023   *
 024   * Whenever possible, you must set these information (original template name
 025   * and line number) yourself by passing them to the constructor. If some or all
 026   * these information are not available from where you throw the exception, then
 027   * this class will guess them automatically (when the line number is set to -1
 028   * and/or the filename is set to null). As this is a costly operation, this
 029   * can be disabled by passing false for both the filename and the line number
 030   * when creating a new instance of this class.
 031   *
 032   * @author Fabien Potencier <fabien@symfony.com>
 033   */
 034  class Twig_Error extends Exception
 035  {
 036      protected $lineno;
 037      protected $filename;
 038      protected $rawMessage;
 039      protected $previous;
 040   
 041      /**
 042       * Constructor.
 043       *
 044       * Set both the line number and the filename to false to
 045       * disable automatic guessing of the original template name
 046       * and line number.
 047       *
 048       * Set the line number to -1 to enable its automatic guessing.
 049       * Set the filename to null to enable its automatic guessing.
 050       *
 051       * By default, automatic guessing is enabled.
 052       *
 053       * @param string    $message  The error message
 054       * @param integer   $lineno   The template line where the error occurred
 055       * @param string    $filename The template file name where the error occurred
 056       * @param Exception $previous The previous exception
 057       */
 058      public function __construct($message, $lineno = -1, $filename = null, Exception $previous = null)
 059      {
 060          if (version_compare(PHP_VERSION, '5.3.0', '<')) {
 061              $this->previous = $previous;
 062              parent::__construct('');
 063          } else {
 064              parent::__construct('', 0, $previous);
 065          }
 066   
 067          $this->lineno = $lineno;
 068          $this->filename = $filename;
 069   
 070          if (-1 === $this->lineno || null === $this->filename) {
 071              $this->guessTemplateInfo();
 072          }
 073   
 074          $this->rawMessage = $message;
 075   
 076          $this->updateRepr();
 077      }
 078   
 079      /**
 080       * Gets the raw message.
 081       *
 082       * @return string The raw message
 083       */
 084      public function getRawMessage()
 085      {
 086          return $this->rawMessage;
 087      }
 088   
 089      /**
 090       * Gets the filename where the error occurred.
 091       *
 092       * @return string The filename
 093       */
 094      public function getTemplateFile()
 095      {
 096          return $this->filename;
 097      }
 098   
 099      /**
 100       * Sets the filename where the error occurred.
 101       *
 102       * @param string $filename The filename
 103       */
 104      public function setTemplateFile($filename)
 105      {
 106          $this->filename = $filename;
 107   
 108          $this->updateRepr();
 109      }
 110   
 111      /**
 112       * Gets the template line where the error occurred.
 113       *
 114       * @return integer The template line
 115       */
 116      public function getTemplateLine()
 117      {
 118          return $this->lineno;
 119      }
 120   
 121      /**
 122       * Sets the template line where the error occurred.
 123       *
 124       * @param integer $lineno The template line
 125       */
 126      public function setTemplateLine($lineno)
 127      {
 128          $this->lineno = $lineno;
 129   
 130          $this->updateRepr();
 131      }
 132   
 133      public function guess()
 134      {
 135          $this->guessTemplateInfo();
 136          $this->updateRepr();
 137      }
 138   
 139      /**
 140       * For PHP < 5.3.0, provides access to the getPrevious() method.
 141       *
 142       * @param string $method    The method name
 143       * @param array  $arguments The parameters to be passed to the method
 144       *
 145       * @return Exception The previous exception or null
 146       *
 147       * @throws BadMethodCallException
 148       */
 149      public function __call($method, $arguments)
 150      {
 151          if ('getprevious' == strtolower($method)) {
 152              return $this->previous;
 153          }
 154   
 155          throw new BadMethodCallException(sprintf('Method "Twig_Error::%s()" does not exist.', $method));
 156      }
 157   
 158      protected function updateRepr()
 159      {
 160          $this->message = $this->rawMessage;
 161   
 162          $dot = false;
 163          if ('.' === substr($this->message, -1)) {
 164              $this->message = substr($this->message, 0, -1);
 165              $dot = true;
 166          }
 167   
 168          if ($this->filename) {
 169              if (is_string($this->filename) || (is_object($this->filename) && method_exists($this->filename, '__toString'))) {
 170                  $filename = sprintf('"%s"', $this->filename);
 171              } else {
 172                  $filename = json_encode($this->filename);
 173              }
 174              $this->message .= sprintf(' in %s', $filename);
 175          }
 176   
 177          if ($this->lineno && $this->lineno >= 0) {
 178              $this->message .= sprintf(' at line %d', $this->lineno);
 179          }
 180   
 181          if ($dot) {
 182              $this->message .= '.';
 183          }
 184      }
 185   
 186      protected function guessTemplateInfo()
 187      {
 188          $template = null;
 189          $templateClass = null;
 190   
 191          if (version_compare(phpversion(), '5.3.6', '>=')) {
 192              $backtrace = debug_backtrace(DEBUG_BACKTRACE_IGNORE_ARGS | DEBUG_BACKTRACE_PROVIDE_OBJECT);
 193          } else {
 194              $backtrace = debug_backtrace();
 195          }
 196   
 197          foreach ($backtrace as $trace) {
 198              if (isset($trace['object']) && $trace['object'] instanceof Twig_Template && 'Twig_Template' !== get_class($trace['object'])) {
 199                  $currentClass = get_class($trace['object']);
 200                  $isEmbedContainer = 0 === strpos($templateClass, $currentClass);
 201                  if (null === $this->filename || ($this->filename == $trace['object']->getTemplateName() && !$isEmbedContainer)) {
 202                      $template = $trace['object'];
 203                      $templateClass = get_class($trace['object']);
 204                  }
 205              }
 206          }
 207   
 208          // update template filename
 209          if (null !== $template && null === $this->filename) {
 210              $this->filename = $template->getTemplateName();
 211          }
 212   
 213          if (null === $template || $this->lineno > -1) {
 214              return;
 215          }
 216   
 217          $r = new ReflectionObject($template);
 218          $file = $r->getFileName();
 219   
 220          $exceptions = array($e = $this);
 221          while (($e instanceof self || method_exists($e, 'getPrevious')) && $e = $e->getPrevious()) {
 222              $exceptions[] = $e;
 223          }
 224   
 225          while ($e = array_pop($exceptions)) {
 226              $traces = $e->getTrace();
 227              while ($trace = array_shift($traces)) {
 228                  if (!isset($trace['file']) || !isset($trace['line']) || $file != $trace['file']) {
 229                      continue;
 230                  }
 231   
 232                  foreach ($template->getDebugInfo() as $codeLine => $templateLine) {
 233                      if ($codeLine <= $trace['line']) {
 234                          // update template line
 235                          $this->lineno = $templateLine;
 236   
 237                          return;
 238                      }
 239                  }
 240              }
 241          }
 242      }
 243  }
 244