PluginProbe
Depicter — Popup & Slider Builder / 1.3.2
Depicter — Popup & Slider Builder v1.3.2
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 1.3.2, at modules/GuzzleHttp/Psr7/InflateStream.php

57 lines 1.8 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2
3 namespace Depicter\GuzzleHttp\Psr7;
4
5 use Depicter\Psr\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