PluginProbe ʕ •ᴥ•ʔ
Booking for Appointments and Events Calendar – Amelia / 1.2.20
Booking for Appointments and Events Calendar – Amelia v1.2.20
2.4.4 2.4.3 2.4.2 2.4.1 2.4 trunk 1.2.1 1.2.10 1.2.11 1.2.12 1.2.13 1.2.14 1.2.15 1.2.16 1.2.17 1.2.18 1.2.19 1.2.2 1.2.20 1.2.21 1.2.22 1.2.23 1.2.24 1.2.25 1.2.26 1.2.27 1.2.28 1.2.29 1.2.3 1.2.30 1.2.31 1.2.32 1.2.33 1.2.34 1.2.35 1.2.36 1.2.37 1.2.38 1.2.4 1.2.5 1.2.6 1.2.7 1.2.8 1.2.9 2.0 2.0.1 2.0.2 2.1 2.1.1 2.1.2 2.1.3 2.2 2.2.1 2.3
ameliabooking / vendor / guzzlehttp / psr7 / src / InflateStream.php
ameliabooking / vendor / guzzlehttp / psr7 / src Last commit date
AppendStream.php 3 years ago BufferStream.php 3 years ago CachingStream.php 3 years ago DroppingStream.php 3 years ago FnStream.php 3 years ago Header.php 5 years ago InflateStream.php 3 years ago LazyOpenStream.php 3 years ago LimitStream.php 3 years ago Message.php 3 years ago MessageTrait.php 2 years ago MimeType.php 5 years ago MultipartStream.php 3 years ago NoSeekStream.php 3 years ago PumpStream.php 3 years ago Query.php 4 years ago Request.php 3 years ago Response.php 3 years ago Rfc7230.php 4 years ago ServerRequest.php 3 years ago Stream.php 3 years ago StreamDecoratorTrait.php 3 years ago StreamWrapper.php 3 years ago UploadedFile.php 3 years ago Uri.php 3 years ago UriComparator.php 2 years ago UriNormalizer.php 3 years ago UriResolver.php 3 years ago Utils.php 3 years ago functions.php 3 years ago functions_include.php 5 years ago
InflateStream.php
57 lines
1 <?php
2
3 namespace AmeliaGuzzleHttp\Psr7;
4
5 use AmeliaPsr\Http\Message\StreamInterface;
6
7 /**
8 * Uses PHP's zlib.inflate filter to inflate deflate or gzipped content.
9 *
10 * This stream decorator skips the first 10 bytes of the given stream to remove
11 * the gzip header, converts the provided stream to a PHP stream resource,
12 * then appends the zlib.inflate filter. The stream is then converted back
13 * to a Guzzle stream resource to be used as a Guzzle stream.
14 *
15 * @link http://tools.ietf.org/html/rfc1952
16 * @link http://php.net/manual/en/filters.compression.php
17 *
18 * @final
19 */
20 class InflateStream implements StreamInterface
21 {
22 use StreamDecoratorTrait;
23
24 public function __construct(StreamInterface $stream)
25 {
26 // read the first 10 bytes, ie. gzip header
27 $header = $stream->read(10);
28 $filenameHeaderLength = $this->getLengthOfPossibleFilenameHeader($stream, $header);
29 // Skip the header, that is 10 + length of filename + 1 (nil) bytes
30 $stream = new LimitStream($stream, -1, 10 + $filenameHeaderLength);
31 $resource = StreamWrapper::getResource($stream);
32 stream_filter_append($resource, 'zlib.inflate', STREAM_FILTER_READ);
33 $this->stream = $stream->isSeekable() ? new Stream($resource) : new NoSeekStream(new Stream($resource));
34 }
35
36 /**
37 * @param StreamInterface $stream
38 * @param $header
39 *
40 * @return int
41 */
42 private function getLengthOfPossibleFilenameHeader(StreamInterface $stream, $header)
43 {
44 $filename_header_length = 0;
45
46 if (substr(bin2hex($header), 6, 2) === '08') {
47 // we have a filename, read until nil
48 $filename_header_length = 1;
49 while ($stream->read(1) !== chr(0)) {
50 $filename_header_length++;
51 }
52 }
53
54 return $filename_header_length;
55 }
56 }
57