1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
|
<?php namespace GuzzleHttp\Psr7;
use Psr\Http\Message\StreamInterface;
/** * Stream decorator that begins dropping data once the size of the underlying * stream becomes too full. */ class DroppingStream implements StreamInterface { use StreamDecoratorTrait;
private $maxLength;
/** * @param StreamInterface $stream Underlying stream to decorate. * @param int $maxLength Maximum size before dropping data. */ public function __construct(StreamInterface $stream, $maxLength) { $this->stream = $stream; $this->maxLength = $maxLength; }
public function write($string) { $diff = $this->maxLength - $this->stream->getSize();
// Begin returning 0 when the underlying stream is too large. if ($diff <= 0) { return 0; }
// Write the stream or a subset of the stream if needed. if (strlen($string) < $diff) { return $this->stream->write($string); }
return $this->stream->write(substr($string, 0, $diff)); } }
|