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   * Stream decorator that begins dropping data once the size of the underlying
  11   * stream becomes too full.
  12   */
  13  final class DroppingStream implements StreamInterface
  14  {
  15      use StreamDecoratorTrait;
  16  
  17      /** @var int */
  18      private $maxLength;
  19  
  20      /** @var StreamInterface */
  21      private $stream;
  22  
  23      /**
  24       * @param StreamInterface $stream    Underlying stream to decorate.
  25       * @param int             $maxLength Maximum size before dropping data.
  26       */
  27      public function __construct(StreamInterface $stream, int $maxLength)
  28      {
  29          $this->stream = $stream;
  30          $this->maxLength = $maxLength;
  31      }
  32  
  33      public function write($string): int
  34      {
  35          $diff = $this->maxLength - $this->stream->getSize();
  36  
  37          // Begin returning 0 when the underlying stream is too large.
  38          if ($diff <= 0) {
  39              return 0;
  40          }
  41  
  42          // Write the stream or a subset of the stream if needed.
  43          if (strlen($string) < $diff) {
  44              return $this->stream->write($string);
  45          }
  46  
  47          return $this->stream->write(substr($string, 0, $diff));
  48      }
  49  }