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. |
|
(Beispiel Datei-Icons)
|
Auf das Icon klicken um den Quellcode anzuzeigen |
RequestDataCollector.php
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\HttpFoundation\ParameterBag;
015 use Symfony\Component\HttpFoundation\HeaderBag;
016 use Symfony\Component\HttpFoundation\Request;
017 use Symfony\Component\HttpFoundation\Response;
018 use Symfony\Component\HttpFoundation\ResponseHeaderBag;
019 use Symfony\Component\HttpKernel\KernelEvents;
020 use Symfony\Component\HttpKernel\Event\FilterControllerEvent;
021 use Symfony\Component\EventDispatcher\EventSubscriberInterface;
022
023 /**
024 * RequestDataCollector.
025 *
026 * @author Fabien Potencier <fabien@symfony.com>
027 */
028 class RequestDataCollector extends DataCollector implements EventSubscriberInterface
029 {
030 protected $controllers;
031
032 public function __construct()
033 {
034 $this->controllers = new \SplObjectStorage();
035 }
036
037 /**
038 * {@inheritdoc}
039 */
040 public function collect(Request $request, Response $response, \Exception $exception = null)
041 {
042 $responseHeaders = $response->headers->all();
043 $cookies = array();
044 foreach ($response->headers->getCookies() as $cookie) {
045 $cookies[] = $this->getCookieHeader($cookie->getName(), $cookie->getValue(), $cookie->getExpiresTime(), $cookie->getPath(), $cookie->getDomain(), $cookie->isSecure(), $cookie->isHttpOnly());
046 }
047 if (count($cookies) > 0) {
048 $responseHeaders['Set-Cookie'] = $cookies;
049 }
050
051 // attributes are serialized and as they can be anything, they need to be converted to strings.
052 $attributes = array();
053 foreach ($request->attributes->all() as $key => $value) {
054 if ('_route' === $key && is_object($value)) {
055 $attributes[$key] = $this->varToString($value->getPath());
056 } elseif ('_route_params' === $key) {
057 // we need to keep route params as an array (see getRouteParams())
058 foreach ($value as $k => $v) {
059 $value[$k] = $this->varToString($v);
060 }
061 $attributes[$key] = $value;
062 } else {
063 $attributes[$key] = $this->varToString($value);
064 }
065 }
066
067 $content = null;
068 try {
069 $content = $request->getContent();
070 } catch (\LogicException $e) {
071 // the user already got the request content as a resource
072 $content = false;
073 }
074
075 $sessionMetadata = array();
076 $sessionAttributes = array();
077 $flashes = array();
078 if ($request->hasSession()) {
079 $session = $request->getSession();
080 if ($session->isStarted()) {
081 $sessionMetadata['Created'] = date(DATE_RFC822, $session->getMetadataBag()->getCreated());
082 $sessionMetadata['Last used'] = date(DATE_RFC822, $session->getMetadataBag()->getLastUsed());
083 $sessionMetadata['Lifetime'] = $session->getMetadataBag()->getLifetime();
084 $sessionAttributes = $session->all();
085 $flashes = $session->getFlashBag()->peekAll();
086 }
087 }
088
089 $statusCode = $response->getStatusCode();
090
091 $this->data = array(
092 'format' => $request->getRequestFormat(),
093 'content' => $content,
094 'content_type' => $response->headers->get('Content-Type', 'text/html'),
095 'status_text' => isset(Response::$statusTexts[$statusCode]) ? Response::$statusTexts[$statusCode] : '',
096 'status_code' => $statusCode,
097 'request_query' => $request->query->all(),
098 'request_request' => $request->request->all(),
099 'request_headers' => $request->headers->all(),
100 'request_server' => $request->server->all(),
101 'request_cookies' => $request->cookies->all(),
102 'request_attributes' => $attributes,
103 'response_headers' => $responseHeaders,
104 'session_metadata' => $sessionMetadata,
105 'session_attributes' => $sessionAttributes,
106 'flashes' => $flashes,
107 'path_info' => $request->getPathInfo(),
108 'controller' => 'n/a',
109 'locale' => $request->getLocale(),
110 );
111
112 if (isset($this->data['request_headers']['php-auth-pw'])) {
113 $this->data['request_headers']['php-auth-pw'] = '******';
114 }
115
116 if (isset($this->data['request_server']['PHP_AUTH_PW'])) {
117 $this->data['request_server']['PHP_AUTH_PW'] = '******';
118 }
119
120 if (isset($this->data['request_request']['_password'])) {
121 $this->data['request_request']['_password'] = '******';
122 }
123
124 if (isset($this->controllers[$request])) {
125 $controller = $this->controllers[$request];
126 if (is_array($controller)) {
127 try {
128 $r = new \ReflectionMethod($controller[0], $controller[1]);
129 $this->data['controller'] = array(
130 'class' => is_object($controller[0]) ? get_class($controller[0]) : $controller[0],
131 'method' => $controller[1],
132 'file' => $r->getFileName(),
133 'line' => $r->getStartLine(),
134 );
135 } catch (\ReflectionException $e) {
136 if (is_callable($controller)) {
137 // using __call or __callStatic
138 $this->data['controller'] = array(
139 'class' => is_object($controller[0]) ? get_class($controller[0]) : $controller[0],
140 'method' => $controller[1],
141 'file' => 'n/a',
142 'line' => 'n/a',
143 );
144 }
145 }
146 } elseif ($controller instanceof \Closure) {
147 $r = new \ReflectionFunction($controller);
148 $this->data['controller'] = array(
149 'class' => $r->getName(),
150 'method' => null,
151 'file' => $r->getFileName(),
152 'line' => $r->getStartLine(),
153 );
154 } elseif (is_object($controller)) {
155 $r = new \ReflectionClass($controller);
156 $this->data['controller'] = array(
157 'class' => $r->getName(),
158 'method' => null,
159 'file' => $r->getFileName(),
160 'line' => $r->getStartLine(),
161 );
162 } else {
163 $this->data['controller'] = (string) $controller ?: 'n/a';
164 }
165 unset($this->controllers[$request]);
166 }
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']);
177 }
178
179 public function getRequestQuery()
180 {
181 return new ParameterBag($this->data['request_query']);
182 }
183
184 public function getRequestHeaders()
185 {
186 return new HeaderBag($this->data['request_headers']);
187 }
188
189 public function getRequestServer()
190 {
191 return new ParameterBag($this->data['request_server']);
192 }
193
194 public function getRequestCookies()
195 {
196 return new ParameterBag($this->data['request_cookies']);
197 }
198
199 public function getRequestAttributes()
200 {
201 return new ParameterBag($this->data['request_attributes']);
202 }
203
204 public function getResponseHeaders()
205 {
206 return new ResponseHeaderBag($this->data['response_headers']);
207 }
208
209 public function getSessionMetadata()
210 {
211 return $this->data['session_metadata'];
212 }
213
214 public function getSessionAttributes()
215 {
216 return $this->data['session_attributes'];
217 }
218
219 public function getFlashes()
220 {
221 return $this->data['flashes'];
222 }
223
224 public function getContent()
225 {
226 return $this->data['content'];
227 }
228
229 public function getContentType()
230 {
231 return $this->data['content_type'];
232 }
233
234 public function getStatusText()
235 {
236 return $this->data['status_text'];
237 }
238
239 public function getStatusCode()
240 {
241 return $this->data['status_code'];
242 }
243
244 public function getFormat()
245 {
246 return $this->data['format'];
247 }
248
249 public function getLocale()
250 {
251 return $this->data['locale'];
252 }
253
254 /**
255 * Gets the route name.
256 *
257 * The _route request attributes is automatically set by the Router Matcher.
258 *
259 * @return string The route
260 */
261 public function getRoute()
262 {
263 return isset($this->data['request_attributes']['_route']) ? $this->data['request_attributes']['_route'] : '';
264 }
265
266 /**
267 * Gets the route parameters.
268 *
269 * The _route_params request attributes is automatically set by the RouterListener.
270 *
271 * @return array The parameters
272 */
273 public function getRouteParams()
274 {
275 return isset($this->data['request_attributes']['_route_params']) ? $this->data['request_attributes']['_route_params'] : array();
276 }
277
278 /**
279 * Gets the controller.
280 *
281 * @return string The controller as a string
282 */
283 public function getController()
284 {
285 return $this->data['controller'];
286 }
287
288 public function onKernelController(FilterControllerEvent $event)
289 {
290 $this->controllers[$event->getRequest()] = $event->getController();
291 }
292
293 public static function getSubscribedEvents()
294 {
295 return array(KernelEvents::CONTROLLER => 'onKernelController');
296 }
297
298 /**
299 * {@inheritdoc}
300 */
301 public function getName()
302 {
303 return 'request';
304 }
305
306 private function getCookieHeader($name, $value, $expires, $path, $domain, $secure, $httponly)
307 {
308 $cookie = sprintf('%s=%s', $name, urlencode($value));
309
310 if (0 !== $expires) {
311 if (is_numeric($expires)) {
312 $expires = (int) $expires;
313 } elseif ($expires instanceof \DateTime) {
314 $expires = $expires->getTimestamp();
315 } else {
316 $tmp = strtotime($expires);
317 if (false === $tmp || -1 == $tmp) {
318 throw new \InvalidArgumentException(sprintf('The "expires" cookie parameter is not valid (%s).', $expires));
319 }
320 $expires = $tmp;
321 }
322
323 $cookie .= '; expires='.str_replace('+0000', '', \DateTime::createFromFormat('U', $expires, new \DateTimeZone('GMT'))->format('D, d-M-Y H:i:s T'));
324 }
325
326 if ($domain) {
327 $cookie .= '; domain='.$domain;
328 }
329
330 $cookie .= '; path='.$path;
331
332 if ($secure) {
333 $cookie .= '; secure';
334 }
335
336 if ($httponly) {
337 $cookie .= '; httponly';
338 }
339
340 return $cookie;
341 }
342 }
343