PluginProbe
Depicter — Popup & Slider Builder / trunk
Depicter — Popup & Slider Builder vtrunk
4.8.1 trunk 1.0.0 1.1.0 1.1.2 1.1.4 1.1.6 1.1.7 1.1.8 1.1.9 1.2.0 1.3.0 1.3.1 1.3.2 1.3.3 1.3.5 1.3.8 1.5.0 1.5.1 1.5.2 1.5.5 1.6.0 1.6.1 1.6.2 1.7.0 All 76 releases
depicter / modules / GuzzleHttp / Psr7 / InflateStream.php

InflateStream.php in Depicter — Popup & Slider Builder trunk, at modules/GuzzleHttp/Psr7/InflateStream.php

38 lines 1.4 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2
3 declare(strict_types=1);
4
5 namespace Depicter\GuzzleHttp\Psr7;
6
7 use Depicter\Psr\Http\Message\StreamInterface;
8
9 /**
10 * Uses PHP's zlib.inflate filter to inflate zlib (HTTP deflate, RFC1950) or gzipped (RFC1952) content.
11 *
12 * This stream decorator converts the provided stream to a PHP stream resource,
13 * then appends the zlib.inflate filter. The stream is then converted back
14 * to a Guzzle stream resource to be used as a Guzzle stream.
15 *
16 * @see https://datatracker.ietf.org/doc/html/rfc1950
17 * @see https://datatracker.ietf.org/doc/html/rfc1952
18 * @see https://www.php.net/manual/en/filters.compression.php
19 */
20 final class InflateStream implements StreamInterface
21 {
22 use StreamDecoratorTrait;
23
24 /** @var StreamInterface */
25 private $stream;
26
27 public function __construct(StreamInterface $stream)
28 {
29 $resource = StreamWrapper::getResource($stream);
30 // Specify window=15+32, so zlib will use header detection to both gzip (with header) and zlib data
31 // See https://www.zlib.net/manual.html#Advanced definition of inflateInit2
32 // "Add 32 to windowBits to enable zlib and gzip decoding with automatic header detection"
33 // Default window size is 15.
34 stream_filter_append($resource, 'zlib.inflate', STREAM_FILTER_READ, ['window' => 15 + 32]);
35 $this->stream = $stream->isSeekable() ? new Stream($resource) : new NoSeekStream(new Stream($resource));
36 }
37 }
38