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);
};