$end || $start >= $size) { http_response_code(416); header("Content-Range: bytes */$size"); exit; } http_response_code(206); header("Content-Range: bytes $start-$end/$size"); } $length = $end - $start + 1; header('Content-Length: ' . $length); $fp = fopen($path, 'rb'); fseek($fp, $start); $bufSize = 1 << 20; // 1 MiB $remaining = $length; while ($remaining > 0 && !feof($fp) && !connection_aborted()) { $chunk = fread($fp, (int)min($bufSize, $remaining)); if ($chunk === false) break; echo $chunk; @ob_flush(); @flush(); $remaining -= strlen($chunk); } fclose($fp);