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. |
|
(Beispiel Datei-Icons)
|
Auf das Icon klicken um den Quellcode anzuzeigen |
PrepareBodyMiddleware.php
001 <?php
002 namespace GuzzleHttp;
003
004 use GuzzleHttp\Promise\PromiseInterface;
005 use GuzzleHttp\Psr7;
006 use Psr\Http\Message\RequestInterface;
007
008 /**
009 * Prepares requests that contain a body, adding the Content-Length,
010 * Content-Type, and Expect headers.
011 */
012 class PrepareBodyMiddleware
013 {
014 /** @var callable */
015 private $nextHandler;
016
017 /**
018 * @param callable $nextHandler Next handler to invoke.
019 */
020 public function __construct(callable $nextHandler)
021 {
022 $this->nextHandler = $nextHandler;
023 }
024
025 /**
026 * @param RequestInterface $request
027 * @param array $options
028 *
029 * @return PromiseInterface
030 */
031 public function __invoke(RequestInterface $request, array $options)
032 {
033 $fn = $this->nextHandler;
034
035 // Don't do anything if the request has no body.
036 if ($request->getBody()->getSize() === 0) {
037 return $fn($request, $options);
038 }
039
040 $modify = [];
041
042 // Add a default content-type if possible.
043 if (!$request->hasHeader('Content-Type')) {
044 if ($uri = $request->getBody()->getMetadata('uri')) {
045 if ($type = Psr7\mimetype_from_filename($uri)) {
046 $modify['set_headers']['Content-Type'] = $type;
047 }
048 }
049 }
050
051 // Add a default content-length or transfer-encoding header.
052 if (!$request->hasHeader('Content-Length')
053 && !$request->hasHeader('Transfer-Encoding')
054 ) {
055 $size = $request->getBody()->getSize();
056 if ($size !== null) {
057 $modify['set_headers']['Content-Length'] = $size;
058 } else {
059 $modify['set_headers']['Transfer-Encoding'] = 'chunked';
060 }
061 }
062
063 // Add the expect header if needed.
064 $this->addExpectHeader($request, $options, $modify);
065
066 return $fn(Psr7\modify_request($request, $modify), $options);
067 }
068
069 /**
070 * Add expect header
071 *
072 * @return void
073 */
074 private function addExpectHeader(
075 RequestInterface $request,
076 array $options,
077 array &$modify
078 ) {
079 // Determine if the Expect header should be used
080 if ($request->hasHeader('Expect')) {
081 return;
082 }
083
084 $expect = isset($options['expect']) ? $options['expect'] : null;
085
086 // Return if disabled or if you're not using HTTP/1.1 or HTTP/2.0
087 if ($expect === false || $request->getProtocolVersion() < 1.1) {
088 return;
089 }
090
091 // The expect header is unconditionally enabled
092 if ($expect === true) {
093 $modify['set_headers']['Expect'] = '100-Continue';
094 return;
095 }
096
097 // By default, send the expect header when the payload is > 1mb
098 if ($expect === null) {
099 $expect = 1048576;
100 }
101
102 // Always add if the body cannot be rewound, the size cannot be
103 // determined, or the size is greater than the cutoff threshold
104 $body = $request->getBody();
105 $size = $body->getSize();
106
107 if ($size === null || $size >= (int) $expect || !$body->isSeekable()) {
108 $modify['set_headers']['Expect'] = '100-Continue';
109 }
110 }
111 }
112