19declare(strict_types=1);
23use Psr\Http\Message\ResponseInterface;
26use Psr\Http\Message\ServerRequestInterface;
27use Psr\Http\Message\RequestInterface;
41 ServerRequestInterface $request,
44 ): ResponseInterface {
46 $server_params = $request->getServerParams();
48 if ($request->getMethod() ===
'HEAD') {
52 if (isset($server_params[
'HTTP_RANGE']) && $this->
supportPartial()) {
61 ): ResponseInterface {
62 $uri = $stream->getMetadata(
'uri');
71 date(
"D, j M Y H:i:s", filemtime($uri) ?: time()) .
" GMT"
73 }
catch (\Throwable) {
82 ): ResponseInterface {
88 RequestInterface|ServerRequestInterface $request,
91 ): ResponseInterface {
92 if (!$this->supportPartial()) {
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;
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);
134 $output_length = strlen($content);
137 $length = $buffer_size;
138 $content = stream_get_contents($fh, $length, $start);
139 $output_length = strlen($content);
141 Streams::ofString($content)
143 $end = $start + $output_length - 1;
147 ResponseHeader::CONTENT_RANGE,
148 "bytes {$start}-{$end}/{$content_length}"
151 return $response->withHeader(ResponseHeader::CONTENT_LENGTH, $output_length);
supportsAttachmentDelivery()
deliverFull(ResponseInterface $response, FileStream $stream,)
buildHeaders(ResponseInterface $response, FileStream $stream)
deliverPartial(RequestInterface|ServerRequestInterface $request, ResponseInterface $response, FileStream $stream,)
buildForStream(ServerRequestInterface $request, ResponseInterface $response, FileStream $stream,)
Stream factory which enables the user to create streams without the knowledge of the concrete class.
The base interface for all filesystem streams.
if(!file_exists('../ilias.ini.php'))