Skip to content
This repository was archived by the owner on May 16, 2026. It is now read-only.
This repository was archived by the owner on May 16, 2026. It is now read-only.

How do I stream a response using chunked transfer encoding ? #25

@henrywood

Description

@henrywood

I was wondering if it is possible to stream a chunked response using icicle.

Could someone please provide a small example of how I would write to the response's output stream line by line.

If I have this generator:

function getFileLines($file, $mode) {

    $f = fopen($file, $mode);

    try {

        while ($line = fgets($f)) {
            yield $line;
        }
    } finally {
            fclose($f);
    }
}

``
then I would like to be able to send each line to the client using chunked transfer encoding

// Create some kind of response stream here ???
$responseStream = ...
$mime = 'application/json';

    $response = new BasicResponse(200, [
                        'Content-Type'                  => $mime,
                        'Connection'                    => 'keep-alive',
                        'Transfer-Encoding'          => 'chunked',
                        'Server'                        => PROD.'/'.WS_VERSION,
                        'Date'                          => gmdate('D, d M Y H:i:s T')
    ], $responseStream);

$responseStream->seek(0);
$pos = 0;

foreach(getFileLines('some/file.txt') as $l) {
           $len = dechex(strlen($l));
           $line = $len."\r\n";
           $line.= $l."\r\n"
           $responseStream->write($line);
           $pos+= strlen($line);  
           $responseStream->seek($pos);    
}

// End the chunked transfer
$responseStream->end("00\r\n\r\n");

How can I achieve this using ICICLEIO ?

Thanks in advance

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions