Verzeichnisstruktur phpBB-3.3.15


Veröffentlicht
28.08.2024

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

RequestDataCollector.php

Zuletzt modifiziert: 02.04.2025, 15:03 - Dateigröße: 12.52 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\DataCollector;
013   
014  use Symfony\Component\EventDispatcher\EventSubscriberInterface;
015  use Symfony\Component\HttpFoundation\Cookie;
016  use Symfony\Component\HttpFoundation\ParameterBag;
017  use Symfony\Component\HttpFoundation\Request;
018  use Symfony\Component\HttpFoundation\Response;
019  use Symfony\Component\HttpKernel\Event\FilterControllerEvent;
020  use Symfony\Component\HttpKernel\Event\FilterResponseEvent;
021  use Symfony\Component\HttpKernel\KernelEvents;
022   
023  /**
024   * @author Fabien Potencier <fabien@symfony.com>
025   */
026  class RequestDataCollector extends DataCollector implements EventSubscriberInterface, LateDataCollectorInterface
027  {
028      protected $controllers;
029   
030      public function __construct()
031      {
032          $this->controllers = new \SplObjectStorage();
033      }
034   
035      /**
036       * {@inheritdoc}
037       */
038      public function collect(Request $request, Response $response, \Exception $exception = null)
039      {
040          // attributes are serialized and as they can be anything, they need to be converted to strings.
041          $attributes = [];
042          $route = '';
043          foreach ($request->attributes->all() as $key => $value) {
044              if ('_route' === $key) {
045                  $route = \is_object($value) ? $value->getPath() : $value;
046                  $attributes[$key] = $route;
047              } else {
048                  $attributes[$key] = $value;
049              }
050          }
051   
052          try {
053              $content = $request->getContent();
054          } catch (\LogicException $e) {
055              // the user already got the request content as a resource
056              $content = false;
057          }
058   
059          $sessionMetadata = [];
060          $sessionAttributes = [];
061          $flashes = [];
062          if ($request->hasSession()) {
063              $session = $request->getSession();
064              if ($session->isStarted()) {
065                  $sessionMetadata['Created'] = date(\DATE_RFC822, $session->getMetadataBag()->getCreated());
066                  $sessionMetadata['Last used'] = date(\DATE_RFC822, $session->getMetadataBag()->getLastUsed());
067                  $sessionMetadata['Lifetime'] = $session->getMetadataBag()->getLifetime();
068                  $sessionAttributes = $session->all();
069                  $flashes = $session->getFlashBag()->peekAll();
070              }
071          }
072   
073          $statusCode = $response->getStatusCode();
074   
075          $responseCookies = [];
076          foreach ($response->headers->getCookies() as $cookie) {
077              $responseCookies[$cookie->getName()] = $cookie;
078          }
079   
080          $this->data = [
081              'method' => $request->getMethod(),
082              'format' => $request->getRequestFormat(),
083              'content' => $content,
084              'content_type' => $response->headers->get('Content-Type', 'text/html'),
085              'status_text' => isset(Response::$statusTexts[$statusCode]) ? Response::$statusTexts[$statusCode] : '',
086              'status_code' => $statusCode,
087              'request_query' => $request->query->all(),
088              'request_request' => $request->request->all(),
089              'request_headers' => $request->headers->all(),
090              'request_server' => $request->server->all(),
091              'request_cookies' => $request->cookies->all(),
092              'request_attributes' => $attributes,
093              'route' => $route,
094              'response_headers' => $response->headers->all(),
095              'response_cookies' => $responseCookies,
096              'session_metadata' => $sessionMetadata,
097              'session_attributes' => $sessionAttributes,
098              'flashes' => $flashes,
099              'path_info' => $request->getPathInfo(),
100              'controller' => 'n/a',
101              'locale' => $request->getLocale(),
102          ];
103   
104          if (isset($this->data['request_headers']['php-auth-pw'])) {
105              $this->data['request_headers']['php-auth-pw'] = '******';
106          }
107   
108          if (isset($this->data['request_server']['PHP_AUTH_PW'])) {
109              $this->data['request_server']['PHP_AUTH_PW'] = '******';
110          }
111   
112          if (isset($this->data['request_request']['_password'])) {
113              $this->data['request_request']['_password'] = '******';
114          }
115   
116          foreach ($this->data as $key => $value) {
117              if (!\is_array($value)) {
118                  continue;
119              }
120              if ('request_headers' === $key || 'response_headers' === $key) {
121                  $this->data[$key] = array_map(function ($v) { return isset($v[0]) && !isset($v[1]) ? $v[0] : $v; }, $value);
122              }
123          }
124   
125          if (isset($this->controllers[$request])) {
126              $this->data['controller'] = $this->parseController($this->controllers[$request]);
127              unset($this->controllers[$request]);
128          }
129   
130          if ($request->attributes->has('_redirected') && $redirectCookie = $request->cookies->get('sf_redirect')) {
131              $this->data['redirect'] = json_decode($redirectCookie, true);
132   
133              $response->headers->clearCookie('sf_redirect');
134          }
135   
136          if ($response->isRedirect()) {
137              $response->headers->setCookie(new Cookie(
138                  'sf_redirect',
139                  json_encode([
140                      'token' => $response->headers->get('x-debug-token'),
141                      'route' => $request->attributes->get('_route', 'n/a'),
142                      'method' => $request->getMethod(),
143                      'controller' => $this->parseController($request->attributes->get('_controller')),
144                      'status_code' => $statusCode,
145                      'status_text' => Response::$statusTexts[(int) $statusCode],
146                  ])
147              ));
148          }
149   
150          $this->data['identifier'] = $this->data['route'] ?: (\is_array($this->data['controller']) ? $this->data['controller']['class'].'::'.$this->data['controller']['method'].'()' : $this->data['controller']);
151      }
152   
153      public function lateCollect()
154      {
155          $this->data = $this->cloneVar($this->data);
156      }
157   
158      public function reset()
159      {
160          $this->data = [];
161          $this->controllers = new \SplObjectStorage();
162      }
163   
164      public function getMethod()
165      {
166          return $this->data['method'];
167      }
168   
169      public function getPathInfo()
170      {
171          return $this->data['path_info'];
172      }
173   
174      public function getRequestRequest()
175      {
176          return new ParameterBag($this->data['request_request']->getValue());
177      }
178   
179      public function getRequestQuery()
180      {
181          return new ParameterBag($this->data['request_query']->getValue());
182      }
183   
184      public function getRequestHeaders()
185      {
186          return new ParameterBag($this->data['request_headers']->getValue());
187      }
188   
189      public function getRequestServer($raw = false)
190      {
191          return new ParameterBag($this->data['request_server']->getValue($raw));
192      }
193   
194      public function getRequestCookies($raw = false)
195      {
196          return new ParameterBag($this->data['request_cookies']->getValue($raw));
197      }
198   
199      public function getRequestAttributes()
200      {
201          return new ParameterBag($this->data['request_attributes']->getValue());
202      }
203   
204      public function getResponseHeaders()
205      {
206          return new ParameterBag($this->data['response_headers']->getValue());
207      }
208   
209      public function getResponseCookies()
210      {
211          return new ParameterBag($this->data['response_cookies']->getValue());
212      }
213   
214      public function getSessionMetadata()
215      {
216          return $this->data['session_metadata']->getValue();
217      }
218   
219      public function getSessionAttributes()
220      {
221          return $this->data['session_attributes']->getValue();
222      }
223   
224      public function getFlashes()
225      {
226          return $this->data['flashes']->getValue();
227      }
228   
229      public function getContent()
230      {
231          return $this->data['content'];
232      }
233   
234      public function getContentType()
235      {
236          return $this->data['content_type'];
237      }
238   
239      public function getStatusText()
240      {
241          return $this->data['status_text'];
242      }
243   
244      public function getStatusCode()
245      {
246          return $this->data['status_code'];
247      }
248   
249      public function getFormat()
250      {
251          return $this->data['format'];
252      }
253   
254      public function getLocale()
255      {
256          return $this->data['locale'];
257      }
258   
259      /**
260       * Gets the route name.
261       *
262       * The _route request attributes is automatically set by the Router Matcher.
263       *
264       * @return string The route
265       */
266      public function getRoute()
267      {
268          return $this->data['route'];
269      }
270   
271      public function getIdentifier()
272      {
273          return $this->data['identifier'];
274      }
275   
276      /**
277       * Gets the route parameters.
278       *
279       * The _route_params request attributes is automatically set by the RouterListener.
280       *
281       * @return array The parameters
282       */
283      public function getRouteParams()
284      {
285          return isset($this->data['request_attributes']['_route_params']) ? $this->data['request_attributes']['_route_params']->getValue() : [];
286      }
287   
288      /**
289       * Gets the parsed controller.
290       *
291       * @return array|string The controller as a string or array of data
292       *                      with keys 'class', 'method', 'file' and 'line'
293       */
294      public function getController()
295      {
296          return $this->data['controller'];
297      }
298   
299      /**
300       * Gets the previous request attributes.
301       *
302       * @return array|bool A legacy array of data from the previous redirection response
303       *                    or false otherwise
304       */
305      public function getRedirect()
306      {
307          return isset($this->data['redirect']) ? $this->data['redirect'] : false;
308      }
309   
310      public function onKernelController(FilterControllerEvent $event)
311      {
312          $this->controllers[$event->getRequest()] = $event->getController();
313      }
314   
315      public function onKernelResponse(FilterResponseEvent $event)
316      {
317          if (!$event->isMasterRequest()) {
318              return;
319          }
320   
321          if ($event->getRequest()->cookies->has('sf_redirect')) {
322              $event->getRequest()->attributes->set('_redirected', true);
323          }
324      }
325   
326      public static function getSubscribedEvents()
327      {
328          return [
329              KernelEvents::CONTROLLER => 'onKernelController',
330              KernelEvents::RESPONSE => 'onKernelResponse',
331          ];
332      }
333   
334      /**
335       * {@inheritdoc}
336       */
337      public function getName()
338      {
339          return 'request';
340      }
341   
342      /**
343       * Parse a controller.
344       *
345       * @param mixed $controller The controller to parse
346       *
347       * @return array|string An array of controller data or a simple string
348       */
349      protected function parseController($controller)
350      {
351          if (\is_string($controller) && false !== strpos($controller, '::')) {
352              $controller = explode('::', $controller);
353          }
354   
355          if (\is_array($controller)) {
356              try {
357                  $r = new \ReflectionMethod($controller[0], $controller[1]);
358   
359                  return [
360                      'class' => \is_object($controller[0]) ? \get_class($controller[0]) : $controller[0],
361                      'method' => $controller[1],
362                      'file' => $r->getFileName(),
363                      'line' => $r->getStartLine(),
364                  ];
365              } catch (\ReflectionException $e) {
366                  if (\is_callable($controller)) {
367                      // using __call or  __callStatic
368                      return [
369                          'class' => \is_object($controller[0]) ? \get_class($controller[0]) : $controller[0],
370                          'method' => $controller[1],
371                          'file' => 'n/a',
372                          'line' => 'n/a',
373                      ];
374                  }
375              }
376          }
377   
378          if ($controller instanceof \Closure) {
379              $r = new \ReflectionFunction($controller);
380   
381              $controller = [
382                  'class' => $r->getName(),
383                  'method' => null,
384                  'file' => $r->getFileName(),
385                  'line' => $r->getStartLine(),
386              ];
387   
388              if (false !== strpos($r->name, '{closure}')) {
389                  return $controller;
390              }
391              $controller['method'] = $r->name;
392   
393              if ($class = $r->getClosureScopeClass()) {
394                  $controller['class'] = $class->name;
395              } else {
396                  return $r->name;
397              }
398   
399              return $controller;
400          }
401   
402          if (\is_object($controller)) {
403              $r = new \ReflectionClass($controller);
404   
405              return [
406                  'class' => $r->getName(),
407                  'method' => null,
408                  'file' => $r->getFileName(),
409                  'line' => $r->getStartLine(),
410              ];
411          }
412   
413          return \is_string($controller) ? $controller : 'n/a';
414      }
415  }
416