Streamer is an Object-Oriented API for PHP streams.
A stream is a flow of bytes from one container to the other. You already use streams a lot in PHP, for instance each time you load a file into memory (file_get_contents()
). You should explicitly use streams each time that:
- You need to access data from a container, but you don't know the size of this container (e.g. reading from STDIN, or a web service using streaming)
- You need to start processing data from a container before the whole transfer is finished (e.g. start zipping a file before it's all in memory)
- You need to save time and memory
PHP has a very elaborate stream API ; unfortunately, it uses functions for most stream operations (except for wrappers - go figure). Streamer is a generic library focusing on offering an object-oriented API to streams, and only that.
use Streamer/Stream;
// basic usage
$stream = new Stream(fopen('smiley.png', 'r'));
$image = '';
while (!$stream->isAtEnd()) {
$image .= $stream->read();
}
// pipe dreams!
$stream1 = new Stream(fopen('smiley.png', 'r'));
$stream2 = new Stream(fopen('tmp.png', 'w'));
// copy the contents from the first stream to the second one
$stream1->pipe($stream2);
Streamer is heavily inspired by other Stream class implementations: