You are here

class InflateStream in Lockr 7.3

Uses PHP's zlib.inflate filter to inflate deflate or gzipped content.

This stream decorator skips the first 10 bytes of the given stream to remove the gzip header, converts the provided stream to a PHP stream resource, then appends the zlib.inflate filter. The stream is then converted back to a Guzzle stream resource to be used as a Guzzle stream.

@link http://tools.ietf.org/html/rfc1952 @link http://php.net/manual/en/filters.compression.php

Hierarchy

Expanded class hierarchy of InflateStream

File

vendor/guzzlehttp/psr7/src/InflateStream.php, line 17

Namespace

GuzzleHttp\Psr7
View source
class InflateStream implements StreamInterface {
  use StreamDecoratorTrait;
  public function __construct(StreamInterface $stream) {

    // read the first 10 bytes, ie. gzip header
    $header = $stream
      ->read(10);
    $filenameHeaderLength = $this
      ->getLengthOfPossibleFilenameHeader($stream, $header);

    // Skip the header, that is 10 + length of filename + 1 (nil) bytes
    $stream = new LimitStream($stream, -1, 10 + $filenameHeaderLength);
    $resource = StreamWrapper::getResource($stream);
    stream_filter_append($resource, 'zlib.inflate', STREAM_FILTER_READ);
    $this->stream = $stream
      ->isSeekable() ? new Stream($resource) : new NoSeekStream(new Stream($resource));
  }

  /**
   * @param StreamInterface $stream
   * @param $header
   * @return int
   */
  private function getLengthOfPossibleFilenameHeader(StreamInterface $stream, $header) {
    $filename_header_length = 0;
    if (substr(bin2hex($header), 6, 2) === '08') {

      // we have a filename, read until nil
      $filename_header_length = 1;
      while ($stream
        ->read(1) !== chr(0)) {
        $filename_header_length++;
      }
    }
    return $filename_header_length;
  }

}

Members

Namesort descending Modifiers Type Description Overrides
InflateStream::getLengthOfPossibleFilenameHeader private function
InflateStream::__construct public function Overrides StreamDecoratorTrait::__construct
StreamDecoratorTrait::close public function 1
StreamDecoratorTrait::createStream protected function Implement in subclasses to dynamically create streams when requested. 2
StreamDecoratorTrait::detach public function
StreamDecoratorTrait::eof public function 2
StreamDecoratorTrait::getContents public function
StreamDecoratorTrait::getMetadata public function
StreamDecoratorTrait::getSize public function 2
StreamDecoratorTrait::isReadable public function
StreamDecoratorTrait::isSeekable public function 1
StreamDecoratorTrait::isWritable public function 1
StreamDecoratorTrait::read public function 2
StreamDecoratorTrait::rewind public function 1
StreamDecoratorTrait::seek public function 3
StreamDecoratorTrait::tell public function 1
StreamDecoratorTrait::write public function 2
StreamDecoratorTrait::__call public function Allow decorators to implement custom methods
StreamDecoratorTrait::__get public function Magic method used to create a new stream if streams are not added in the constructor of a decorator (e.g., LazyOpenStream).
StreamDecoratorTrait::__toString public function