19 declare(strict_types=1);
44 ): ResponseInterface {
46 $server_params = $request->getServerParams();
48 if ($request->getMethod() ===
'HEAD') {
49 return $response->withStatus(200);
52 if (isset($server_params[
'HTTP_RANGE']) && $this->
supportPartial()) {
61 ): ResponseInterface {
62 $uri = $stream->getMetadata(
'uri');
69 $response = $response->withHeader(
71 date(
"D, j M Y H:i:s", filemtime($uri) ?: time()) .
" GMT" 82 ): ResponseInterface {
84 return $response->withBody($stream);
91 ): ResponseInterface {
95 $request->getServerParams();
98 $content_length = $stream->getSize();
101 $range_header = $request->getHeaderLine(
'Range');
103 if ($range_header && preg_match(
104 '%bytes=(\d+)-(\d+)?%i',
108 $start = (
int) $match[1];
109 if (isset($match[2])) {
110 $end = (
int) $match[2];
112 $end ??= $content_length - 1;
115 $response = $response->withStatus(206);
117 $length = $end - $start + 1;
118 $fh = $stream->detach();
121 $buffer_size = 8048 * 1000;
124 if ($stream->isSeekable()) {
126 while (!feof($fh) && $length > 0) {
127 $chunk_size_requested = min($buffer_size, $end - $start);
128 $content = fread($fh, $length);
129 if ($content ===
false) {
132 $length -= strlen($content);
133 $response->getBody()->write($content);
134 $output_length = strlen($content);
137 $length = $buffer_size;
138 $content = stream_get_contents($fh, $length, $start);
139 $output_length = strlen($content);
140 $response = $response->withBody(
143 $end = $start + $output_length - 1;
146 $response = $response->withHeader(
148 "bytes {$start}-{$end}/{$content_length}"
deliverFull(ResponseInterface $response, FileStream $stream,)
deliverPartial(RequestInterface|ServerRequestInterface $request, ResponseInterface $response, FileStream $stream,)
while($session_entry=$r->fetchRow(ilDBConstants::FETCHMODE_ASSOC)) return null
supportsAttachmentDelivery()
buildForStream(ServerRequestInterface $request, ResponseInterface $response, FileStream $stream,)
static ofString(string $string)
Creates a new stream with an initial value.
buildHeaders(ResponseInterface $response, FileStream $stream)
The base interface for all filesystem streams.