[ Index ] |
PHP Cross Reference of phpBB-3.3.3-deutsch |
[Summary view] [Print] [Text view]
1 <?php 2 3 namespace GuzzleHttp\Psr7; 4 5 use 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 class InflateStream implements StreamInterface 19 { 20 use StreamDecoratorTrait; 21 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 /** 35 * @param StreamInterface $stream 36 * @param $header 37 * @return int 38 */ 39 private function getLengthOfPossibleFilenameHeader(StreamInterface $stream, $header) 40 { 41 $filename_header_length = 0; 42 43 if (substr(bin2hex($header), 6, 2) === '08') { 44 // we have a filename, read until nil 45 $filename_header_length = 1; 46 while ($stream->read(1) !== chr(0)) { 47 $filename_header_length++; 48 } 49 } 50 51 return $filename_header_length; 52 } 53 }
title
Description
Body
title
Description
Body
title
Description
Body
title
Body
Generated: Sun Feb 14 20:08:31 2021 | Cross-referenced by PHPXref 0.7.1 |