Search moodle.org's
Developer Documentation

See Release Notes

  • Bug fixes for general core bugs in 4.2.x will end 22 April 2024 (12 months).
  • Bug fixes for security issues in 4.2.x will end 7 October 2024 (18 months).
  • PHP version: minimum PHP 8.0.0 Note: minimum PHP version has increased since Moodle 4.1. PHP 8.1.x is supported too.
   1  <?php
   2  
   3  declare(strict_types=1);
   4  
   5  namespace GuzzleHttp\Psr7;
   6  
   7  use Psr\Http\Message\StreamInterface;
   8  
   9  /**
  10   * Uses PHP's zlib.inflate filter to inflate zlib (HTTP deflate, RFC1950) or gzipped (RFC1952) content.
  11   *
  12   * This stream decorator converts the provided stream to a PHP stream resource,
  13   * then appends the zlib.inflate filter. The stream is then converted back
  14   * to a Guzzle stream resource to be used as a Guzzle stream.
  15   *
  16   * @link http://tools.ietf.org/html/rfc1950
  17   * @link http://tools.ietf.org/html/rfc1952
  18   * @link http://php.net/manual/en/filters.compression.php
  19   */
  20  final class InflateStream implements StreamInterface
  21  {
  22      use StreamDecoratorTrait;
  23  
  24      /** @var StreamInterface */
  25      private $stream;
  26  
  27      public function __construct(StreamInterface $stream)
  28      {
  29          $resource = StreamWrapper::getResource($stream);
  30          // Specify window=15+32, so zlib will use header detection to both gzip (with header) and zlib data
  31          // See http://www.zlib.net/manual.html#Advanced definition of inflateInit2
  32          // "Add 32 to windowBits to enable zlib and gzip decoding with automatic header detection"
  33          // Default window size is 15.
  34          stream_filter_append($resource, 'zlib.inflate', STREAM_FILTER_READ, ['window' => 15 + 32]);
  35          $this->stream = $stream->isSeekable() ? new Stream($resource) : new NoSeekStream(new Stream($resource));
  36      }
  37  }