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