Ver índice de contenidos del libro

2.11. Streaming

Silex también permite hacer streaming para que los controladores empiecen a devolver contenidos antes de que tengan la respuesta completa.

$app->get('/images/{file}', function ($file) use ($app) {
    if (!file_exists(__DIR__.'/images/'.$file)) {
        return $app->abort(404, 'No se ha encontrado la imagen.');
    }
 
    $stream = function () use ($file) {
        readfile($file);
    };
 
    return $app->stream($stream, 200, array('Content-Type' => 'image/png'));
});

Para enviar la información por trozos, utiliza los métodos ob_flush() y flush de PHP:

$stream = function () {
    $fh = fopen('http://www.example.com/', 'rb');
    while (!feof($fh)) {
        echo fread($fh, 1024);
        ob_flush();
        flush();
    }
    fclose($fh);
};