ref https://bugs.php.net/bug.php?id=39135 ,
i was thinking about how to implement HTTP Range requests/HTTP 206 Partial
Content in userland php,
 and ofc it's possible to implement using fread() loops, but it'd be easier
(and faster? presumably) to implement if fpassthru() natively supported a
$max_bytes=null argument,

an example of where it would be useful:

<?php
$h=tmpfile();
fwrite($h,"123456789ABCDEF");
// this is _NOT_ a proper http-range-parser!
$range = $_SERVER['HTTP_RANGE'] ?? "bytes=5-9";
$range=explode("-",explode("=",$range,2)[1],2);
$start = (int)$range[0];
$byte_count = (-$start) + ((int)$range[1]) + 1; // the range format is
weird.. "Range: bytes=5-5" means "seek to byte #5 and serve 1 byte", 5-6
means "seek to byte #5 and serve 2 bytes"~
fseek($h,$start,SEEK_SET);
http_response_code(206); // HTTP 206 Partial Content
//echo fread($h,$byte_count); // << this is not suitable for large files,
if 1GB bytes is requested, this will use 1GB ram...
fpassthru($h, $byte_count);
// should print 6789A

Reply via email to