zbateson/stream-decorators
Lightweight PHP stream decorators for composing and filtering streams. Wrap any resource to add behaviors like buffering, limiting, logging, or on-the-fly transforms while keeping a standard stream interface. Useful for email parsing, I/O pipelines, and testing.
PSR-7 stream decorators for character set conversion and common mail format content encodings.
composer require zbateson/stream-decorators
A huge thank you to all my sponsors. <3
If this project's helped you, please consider sponsoring me.
PHP 8.1 or newer. Tested on PHP 8.1, 8.2, 8.3, 8.4, and 8.5.
The library provides the following Psr\Http\Message\StreamInterface implementations:
Base64Stream - decodes on read and encodes on write to base64CharsetStream - encodes from $streamCharset to $stringCharset on read, and vice-versa on writeChunkSplitStream - splits written characters into lines of $lineLength long (stream implementation of PHP's chunk_split)DecoratedCachingStream - a caching stream that writes to a decorated stream, and reads from the cached undecorated streamNonClosingStream - overrides close() and detach(), and simply unsets the attached stream without closing itPregReplaceFilterStream - calls preg_replace with passed arguments on every read() callQuotedPrintableStream - decodes on read and encodes on write to quoted-printableSeekingLimitStream - similar to GuzzleHttp's LimitStream, but maintains an internal current read positionTellZeroStream - tell() always returns 0 -- used by DecoratedCachingStream to wrap a BufferStream in a CachingStreamUUStream - decodes on read, encodes on write to uu-encoded$stream = GuzzleHttp\Psr7\Utils::streamFor($handle);
$b64Stream = new ZBateson\StreamDecorators\Base64Stream($stream);
$charsetStream = new ZBateson\StreamDecorators\CharsetStream($b64Stream, 'UTF-32', 'UTF-8');
while (($line = GuzzleHttp\Psr7\Utils::readLine()) !== false) {
echo $line, "\r\n";
}
Note that CharsetStream, depending on the target encoding, may return multiple bytes when a single 'char' is read. If using PHP's fread, this will result in a warning. It is recommended to not convert to a stream handle (with StreamWrapper) when using CharsetStream.
BSD licensed - please see license agreement.
How can I help you explore Laravel packages today?