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

Prepare.php

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


001  <?php
002  namespace GuzzleHttp\Subscriber;
003   
004  use GuzzleHttp\Event\BeforeEvent;
005  use GuzzleHttp\Event\RequestEvents;
006  use GuzzleHttp\Event\SubscriberInterface;
007  use GuzzleHttp\Message\AppliesHeadersInterface;
008  use GuzzleHttp\Message\RequestInterface;
009  use GuzzleHttp\Mimetypes;
010  use GuzzleHttp\Stream\StreamInterface;
011   
012  /**
013   * Prepares requests with a body before sending
014   *
015   * **Request Options**
016   *
017   * - expect: Set to true to enable the "Expect: 100-Continue" header for a
018   *   request that send a body. Set to false to disable "Expect: 100-Continue".
019   *   Set to a number so that the size of the payload must be greater than the
020   *   number in order to send the Expect header. Setting to a number will send
021   *   the Expect header for all requests in which the size of the payload cannot
022   *   be determined or where the body is not rewindable.
023   */
024  class Prepare implements SubscriberInterface
025  {
026      public function getEvents()
027      {
028          return ['before' => ['onBefore', RequestEvents::PREPARE_REQUEST]];
029      }
030   
031      public function onBefore(BeforeEvent $event)
032      {
033          $request = $event->getRequest();
034   
035          // Set the appropriate Content-Type for a request if one is not set and
036          // there are form fields
037          if (!($body = $request->getBody())) {
038              return;
039          }
040   
041          $this->addContentLength($request, $body);
042   
043          if ($body instanceof AppliesHeadersInterface) {
044              // Synchronize the body with the request headers
045              $body->applyRequestHeaders($request);
046          } elseif (!$request->hasHeader('Content-Type')) {
047              $this->addContentType($request, $body);
048          }
049   
050          $this->addExpectHeader($request, $body);
051      }
052   
053      private function addContentType(
054          RequestInterface $request,
055          StreamInterface $body
056      ) {
057          if (!($uri = $body->getMetadata('uri'))) {
058              return;
059          }
060   
061          // Guess the content-type based on the stream's "uri" metadata value.
062          // The file extension is used to determine the appropriate mime-type.
063          if ($contentType = Mimetypes::getInstance()->fromFilename($uri)) {
064              $request->setHeader('Content-Type', $contentType);
065          }
066      }
067   
068      private function addContentLength(
069          RequestInterface $request,
070          StreamInterface $body
071      ) {
072          // Set the Content-Length header if it can be determined, and never
073          // send a Transfer-Encoding: chunked and Content-Length header in
074          // the same request.
075          if ($request->hasHeader('Content-Length')) {
076              // Remove transfer-encoding if content-length is set.
077              $request->removeHeader('Transfer-Encoding');
078              return;
079          }
080   
081          if ($request->hasHeader('Transfer-Encoding')) {
082              return;
083          }
084   
085          if (null !== ($size = $body->getSize())) {
086              $request->setHeader('Content-Length', $size);
087              $request->removeHeader('Transfer-Encoding');
088          } elseif ('1.1' == $request->getProtocolVersion()) {
089              // Use chunked Transfer-Encoding if there is no determinable
090              // content-length header and we're using HTTP/1.1.
091              $request->setHeader('Transfer-Encoding', 'chunked');
092              $request->removeHeader('Content-Length');
093          }
094      }
095   
096      private function addExpectHeader(
097          RequestInterface $request,
098          StreamInterface $body
099      ) {
100          // Determine if the Expect header should be used
101          if ($request->hasHeader('Expect')) {
102              return;
103          }
104   
105          $expect = $request->getConfig()['expect'];
106   
107          // Return if disabled or if you're not using HTTP/1.1
108          if ($expect === false || $request->getProtocolVersion() !== '1.1') {
109              return;
110          }
111   
112          // The expect header is unconditionally enabled
113          if ($expect === true) {
114              $request->setHeader('Expect', '100-Continue');
115              return;
116          }
117   
118          // By default, send the expect header when the payload is > 1mb
119          if ($expect === null) {
120              $expect = 1048576;
121          }
122   
123          // Always add if the body cannot be rewound, the size cannot be
124          // determined, or the size is greater than the cutoff threshold
125          $size = $body->getSize();
126          if ($size === null || $size >= (int) $expect || !$body->isSeekable()) {
127              $request->setHeader('Expect', '100-Continue');
128          }
129      }
130  }
131