HTTP/1.1 provides 'Transfer-encoding: chunked' for sending a stream of data from the server.
Zend Diactoros currently doesn't seem to provide out-of-the-box support for this.
- There's no existing
Response that sets the required headers for you.
- There's no existing implementation of
StreamInterface that supports dynamic content and is compatible with the requirements of SapiStreamEmitter.
Possible solution for out-of-the-box support could be:
- Add a
DynamicStreamInterface interface that extends StreamInterface, for type-hinting in a moment
- Add a
GeneratorStream class that implements DynamicStreamInterface, and its read() method gets the required data from a PHP generator
- Add another class that implements
DynamicStreamInterface, and its read() method gets the required data from a PHP callback
- Add a
StreamResponse class that requires a DynamicStreamInterface in the constructor, sets the necessary headers for chunked stream delivery
It leaves questions around handling $maxBufferLength, and where the code goes to write the actual chunked blocks (trait? helper class?).
I have to build a solution for this, and I'm happy to contribute it back to Diactoros, if we can agree a design :)