The documentation you are viewing is for an older version of this component.
Switch to the latest (v2) version.
Emitters are deprecated from Diactoros starting with version 1.8.0. The functionality is now available for any PSR-7 implementation via the package laminas/laminas-httphandlerrunner. We suggest using that functionality instead.
If you are using a non-SAPI PHP implementation and wish to use the
Server class, or if you do not
want to use the
Server implementation but want to emit a response, this package provides an
Laminas\Diactoros\Response\EmitterInterface, defining a method
emit() for emitting the
Diactoros provides two implementations currently, both for working with
traditional Server API (SAPI) implementations:
Laminas\Diactoros\Response\SapiStreamEmitter. Each uses the native
PHP function to emit headers, and
echo() to emit the response body.
If you are using a non-SAPI implementation, you will need to create your own
For example, the
SapiEmitter implementation of the
EmitterInterface can be used thus:
$response = new Laminas\Diactoros\Response(); $response->getBody()->write("some content\n"); $emitter = new Laminas\Diactoros\Response\SapiEmitter(); $emitter->emit($response);
Emitting Ranges of streamed Files
SapiStreamEmitter is useful when you want to emit a
Content-Range. As an
example, to stream a range of bytes from a file to a client, the client can pass
the following header:
Your application would then populate the response with a
$range = $request->getHeaderLine('range'); $range = str_replace('=', ' ', $range); $body = new Stream($pathToFile); $size = $body->getSize(); $range .= '/' . $size; $response = new Response($body); $response = $response->withHeader('Content-Range', $range);
(Note: you will likely want to ensure the range specified falls within the content size of the streamed body!)
SapiStreamEmitter detects the
Content-Range header and emits only the
$emitter = new SapiStreamEmitter(); $emitter->emit($response);
SapiStreamEmitter may be used in place of the
SapiEmitter, even when not
sending files. However, unlike the
SapiEmitter, it will emit a chunk of
content at a time instead of the full content at once, which could lead to
performance overhead. The default chunk size is 8192 bytes.