PluginProbe
Media Cloud Sync / 1.2.10
Media Cloud Sync v1.2.10
1.4.1 1.4.0 1.3.12 1.3.11 1.3.10 trunk 1.0.0 1.0.1 1.0.2 1.0.3 1.1.0 1.1.1 1.2.0 1.2.10 1.2.11 1.2.12 1.2.13 1.2.2 1.2.3 1.2.4 1.2.5 1.2.6 1.2.7 1.2.8 1.2.9 All 35 releases
media-cloud-sync / includes / sdk / s3 / GuzzleHttp / Psr7 / InflateStream.php

InflateStream.php in Media Cloud Sync 1.2.10, at includes/sdk/s3/GuzzleHttp/Psr7/InflateStream.php

52 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 Dudlewebs\WPMCS\s3\GuzzleHttp\Psr7;
4
5 use Dudlewebs\WPMCS\s3\Psr\Http\Message\StreamInterface;
6 /**
7 * Uses PHP's zlib.inflate filter to inflate deflate or gzipped content.
8 *
9 * This stream decorator skips the first 10 bytes of the given stream to remove
10 * the gzip header, converts the provided stream to a PHP stream resource,
11 * then appends the zlib.inflate filter. The stream is then converted back
12 * to a Guzzle stream resource to be used as a Guzzle stream.
13 *
14 * @link http://tools.ietf.org/html/rfc1952
15 * @link http://php.net/manual/en/filters.compression.php
16 *
17 * @final
18 */
19 class InflateStream implements StreamInterface
20 {
21 use StreamDecoratorTrait;
22 public function __construct(StreamInterface $stream)
23 {
24 // read the first 10 bytes, ie. gzip header
25 $header = $stream->read(10);
26 $filenameHeaderLength = $this->getLengthOfPossibleFilenameHeader($stream, $header);
27 // Skip the header, that is 10 + length of filename + 1 (nil) bytes
28 $stream = new LimitStream($stream, -1, 10 + $filenameHeaderLength);
29 $resource = StreamWrapper::getResource($stream);
30 \stream_filter_append($resource, 'zlib.inflate', \STREAM_FILTER_READ);
31 $this->stream = $stream->isSeekable() ? new Stream($resource) : new NoSeekStream(new Stream($resource));
32 }
33 /**
34 * @param StreamInterface $stream
35 * @param $header
36 *
37 * @return int
38 */
39 private function getLengthOfPossibleFilenameHeader(StreamInterface $stream, $header)
40 {
41 $filename_header_length = 0;
42 if (\substr(\bin2hex($header), 6, 2) === '08') {
43 // we have a filename, read until nil
44 $filename_header_length = 1;
45 while ($stream->read(1) !== \chr(0)) {
46 $filename_header_length++;
47 }
48 }
49 return $filename_header_length;
50 }
51 }
52