ILIAS  trunk Revision v11.0_alpha-2662-g519ff7d528f
ILIAS\FileDelivery\Delivery\ResponseBuilder\PHPResponseBuilder Class Reference
+ Inheritance diagram for ILIAS\FileDelivery\Delivery\ResponseBuilder\PHPResponseBuilder:
+ Collaboration diagram for ILIAS\FileDelivery\Delivery\ResponseBuilder\PHPResponseBuilder:

Public Member Functions

 getName ()
 
 buildForStream (ServerRequestInterface $request, ResponseInterface $response, FileStream $stream,)
 
 supportPartial ()
 
 supportStreaming ()
 
 supportFileDeletion ()
 
 supportsInlineDelivery ()
 
 supportsAttachmentDelivery ()
 

Protected Member Functions

 buildHeaders (ResponseInterface $response, FileStream $stream)
 
 deliverFull (ResponseInterface $response, FileStream $stream,)
 
 deliverPartial (RequestInterface|ServerRequestInterface $request, ResponseInterface $response, FileStream $stream,)
 

Detailed Description

Author
Fabian Schmid fabia.nosp@m.n@sr.nosp@m..solu.nosp@m.tion.nosp@m.s

Definition at line 33 of file PHPResponseBuilder.php.

Member Function Documentation

◆ buildForStream()

ILIAS\FileDelivery\Delivery\ResponseBuilder\PHPResponseBuilder::buildForStream ( ServerRequestInterface  $request,
ResponseInterface  $response,
FileStream  $stream 
)

Implements ILIAS\FileDelivery\Delivery\ResponseBuilder\ResponseBuilder.

Definition at line 40 of file PHPResponseBuilder.php.

References ILIAS\FileDelivery\Delivery\ResponseBuilder\PHPResponseBuilder\buildHeaders(), ILIAS\FileDelivery\Delivery\ResponseBuilder\PHPResponseBuilder\deliverFull(), ILIAS\FileDelivery\Delivery\ResponseBuilder\PHPResponseBuilder\deliverPartial(), and ILIAS\FileDelivery\Delivery\ResponseBuilder\PHPResponseBuilder\supportPartial().

44  : ResponseInterface {
45  $response = $this->buildHeaders($response, $stream);
46  $server_params = $request->getServerParams();
47 
48  if ($request->getMethod() === 'HEAD') {
49  return $response->withStatus(200);
50  }
51 
52  if (isset($server_params['HTTP_RANGE']) && $this->supportPartial()) {
53  return $this->deliverPartial($request, $response, $stream);
54  }
55  return $this->deliverFull($response, $stream);
56  }
$response
Definition: xapitoken.php:93
deliverFull(ResponseInterface $response, FileStream $stream,)
deliverPartial(RequestInterface|ServerRequestInterface $request, ResponseInterface $response, FileStream $stream,)
buildHeaders(ResponseInterface $response, FileStream $stream)
+ Here is the call graph for this function:

◆ buildHeaders()

ILIAS\FileDelivery\Delivery\ResponseBuilder\PHPResponseBuilder::buildHeaders ( ResponseInterface  $response,
FileStream  $stream 
)
protected

Definition at line 58 of file PHPResponseBuilder.php.

References ILIAS\StaticURL\Response\Response\ResponseHeader\ACCEPT_RANGES, ILIAS\StaticURL\Response\Response\ResponseHeader\CONTENT_LENGTH, ILIAS\StaticURL\Response\Response\ResponseHeader\ETAG, ILIAS\StaticURL\Response\Response\ResponseHeader\LAST_MODIFIED, and ILIAS\FileDelivery\Delivery\ResponseBuilder\PHPResponseBuilder\supportPartial().

Referenced by ILIAS\FileDelivery\Delivery\ResponseBuilder\PHPResponseBuilder\buildForStream().

61  : ResponseInterface {
62  $uri = $stream->getMetadata('uri');
63  if ($this->supportPartial()) {
64  $response = $response->withHeader(ResponseHeader::ACCEPT_RANGES, 'bytes');
65  }
66 
67  $response = $response->withHeader(ResponseHeader::CONTENT_LENGTH, $stream->getSize());
68  try {
69  $response = $response->withHeader(
71  date("D, j M Y H:i:s", filemtime($uri) ?: time()) . " GMT"
72  );
73  } catch (\Throwable) {
74  }
75 
76  return $response->withHeader(ResponseHeader::ETAG, md5((string) $uri));
77  }
$response
Definition: xapitoken.php:93
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ deliverFull()

ILIAS\FileDelivery\Delivery\ResponseBuilder\PHPResponseBuilder::deliverFull ( ResponseInterface  $response,
FileStream  $stream 
)
protected

Definition at line 79 of file PHPResponseBuilder.php.

Referenced by ILIAS\FileDelivery\Delivery\ResponseBuilder\PHPResponseBuilder\buildForStream().

82  : ResponseInterface {
83  $stream->rewind();
84  return $response->withBody($stream);
85  }
$response
Definition: xapitoken.php:93
+ Here is the caller graph for this function:

◆ deliverPartial()

ILIAS\FileDelivery\Delivery\ResponseBuilder\PHPResponseBuilder::deliverPartial ( RequestInterface|ServerRequestInterface  $request,
ResponseInterface  $response,
FileStream  $stream 
)
protected

Definition at line 87 of file PHPResponseBuilder.php.

References $response, ILIAS\StaticURL\Response\Response\ResponseHeader\CONTENT_LENGTH, ILIAS\StaticURL\Response\Response\ResponseHeader\CONTENT_RANGE, ILIAS\Repository\int(), null, ILIAS\Filesystem\Stream\Streams\ofString(), and ILIAS\FileDelivery\Delivery\ResponseBuilder\PHPResponseBuilder\supportPartial().

Referenced by ILIAS\FileDelivery\Delivery\ResponseBuilder\PHPResponseBuilder\buildForStream().

91  : ResponseInterface {
92  if (!$this->supportPartial()) {
93  return $response;
94  }
95  $request->getServerParams();
96 
97  $start = 0;
98  $content_length = $stream->getSize();
99  $end = null;
100 
101  $range_header = $request->getHeaderLine('Range');
102 
103  if ($range_header && preg_match(
104  '%bytes=(\d+)-(\d+)?%i',
105  $range_header,
106  $match
107  )) {
108  $start = (int) $match[1];
109  if (isset($match[2])) {
110  $end = (int) $match[2];
111  }
112  $end ??= $content_length - 1;
113  }
114 
115  $response = $response->withStatus(206);
116 
117  $length = $end - $start + 1;
118  $fh = $stream->detach();
119 
120  // set $buffer_size to 8MB
121  $buffer_size = 8048 * 1000; // 8,048,000 bytes
122 
123  $output_length = 0;
124  if ($stream->isSeekable()) {
125  fseek($fh, $start);
126  while (!feof($fh) && $length > 0) {
127  $chunk_size_requested = min($buffer_size, $end - $start);
128  $content = fread($fh, $length);
129  if ($content === false) {
130  break;
131  }
132  $length -= strlen($content);
133  $response->getBody()->write($content);
134  $output_length = strlen($content);
135  }
136  } else {
137  $length = $buffer_size;
138  $content = stream_get_contents($fh, $length, $start);
139  $output_length = strlen($content);
140  $response = $response->withBody(
141  Streams::ofString($content)
142  );
143  $end = $start + $output_length - 1;
144  }
145 
146  $response = $response->withHeader(
148  "bytes {$start}-{$end}/{$content_length}"
149  );
150 
151  return $response->withHeader(ResponseHeader::CONTENT_LENGTH, $output_length);
152  }
$response
Definition: xapitoken.php:93
while($session_entry=$r->fetchRow(ilDBConstants::FETCHMODE_ASSOC)) return null
static ofString(string $string)
Creates a new stream with an initial value.
Definition: Streams.php:41
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ getName()

ILIAS\FileDelivery\Delivery\ResponseBuilder\PHPResponseBuilder::getName ( )

Implements ILIAS\FileDelivery\Delivery\ResponseBuilder\ResponseBuilder.

Definition at line 35 of file PHPResponseBuilder.php.

35  : string
36  {
37  return 'php';
38  }

◆ supportFileDeletion()

ILIAS\FileDelivery\Delivery\ResponseBuilder\PHPResponseBuilder::supportFileDeletion ( )

Implements ILIAS\FileDelivery\Delivery\ResponseBuilder\ResponseBuilder.

Definition at line 164 of file PHPResponseBuilder.php.

164  : bool
165  {
166  return true;
167  }

◆ supportPartial()

ILIAS\FileDelivery\Delivery\ResponseBuilder\PHPResponseBuilder::supportPartial ( )

◆ supportsAttachmentDelivery()

ILIAS\FileDelivery\Delivery\ResponseBuilder\PHPResponseBuilder::supportsAttachmentDelivery ( )

Implements ILIAS\FileDelivery\Delivery\ResponseBuilder\ResponseBuilder.

Definition at line 174 of file PHPResponseBuilder.php.

174  : bool
175  {
176  return true;
177  }

◆ supportsInlineDelivery()

ILIAS\FileDelivery\Delivery\ResponseBuilder\PHPResponseBuilder::supportsInlineDelivery ( )

Implements ILIAS\FileDelivery\Delivery\ResponseBuilder\ResponseBuilder.

Definition at line 169 of file PHPResponseBuilder.php.

169  : bool
170  {
171  return true;
172  }

◆ supportStreaming()

ILIAS\FileDelivery\Delivery\ResponseBuilder\PHPResponseBuilder::supportStreaming ( )

Implements ILIAS\FileDelivery\Delivery\ResponseBuilder\ResponseBuilder.

Definition at line 159 of file PHPResponseBuilder.php.

159  : bool
160  {
161  return true;
162  }

The documentation for this class was generated from the following file: