You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
This repository was archived by the owner on Jun 3, 2019. It is now read-only.
Streamer is an Object-Oriented API for PHP streams.
Why should I use 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
What is Streamer?
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.
Installation
Streamer is published on packagist.org, so you can add it to your composer.json file for an easy installation:
composer require fzaninotto/Streamer
or
{
"require": {
"fzaninotto/Streamer": "0.0.1"
}
}
Example
<?phpuseStreamer\Stream,
Streamer\FileStream,
Streamer\NetworkStream;
// basic usage$stream = newStream(fopen('smiley.png', 'r'));
$image = '';
while (!$stream->isEOF()) {
$image .= $stream->read();
}
// pipe dreams!$stream1 = newStream(fopen('smiley.png', 'r'));
$stream2 = newStream(fopen('tmp.png', 'w'));
// copy the contents from the first stream to the second one$stream1->pipe($stream2);
// factory$fileStream = FileStream::create('smiley.png', 'r');
print_r($fileStream);
$networkStream = NetworkStream::create('tcp://www.google.com:80');
print_r($networkStream);
Credits
Streamer is heavily inspired by other Stream class implementations: