Object-Oriented API for PHP streams
Switch branches/tags
Nothing to show
Clone or download
Latest commit 0430431 Jan 31, 2017
Failed to load latest commit information.
Streamer Updated with indent probs Jan 6, 2015
tests Add `Stream::getLine()` Jul 2, 2012
.gitignore Initial Commit Jun 25, 2012
LICENSE Initial Commit Jun 25, 2012
README.md Fix guzzle stream class link Jan 28, 2017
composer.json Initial Commit Jun 25, 2012
phpunit.xml.dist Initial Commit Jun 25, 2012



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.


Streamer is published on packagist.org, so you can add it to your composer.json file for an easy installation:

composer require fzaninotto/Streamer


    "require": {
        "fzaninotto/Streamer": "0.0.1"


use Streamer\Stream,

// basic usage
$stream = new Stream(fopen('smiley.png', 'r'));
$image = '';
while (!$stream->isEOF()) {
  $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

// factory
$fileStream = FileStream::create('smiley.png', 'r');

$networkStream = NetworkStream::create('tcp://www.google.com:80');


Streamer is heavily inspired by other Stream class implementations: