1 | <?php |
||
2 | |||
3 | namespace App\Services\Streamers; |
||
4 | |||
5 | use DaveRandom\Resume\FileResource; |
||
6 | use function DaveRandom\Resume\get_request_header; |
||
7 | use DaveRandom\Resume\InvalidRangeHeaderException; |
||
8 | use DaveRandom\Resume\NonExistentFileException; |
||
9 | use DaveRandom\Resume\RangeSet; |
||
10 | use DaveRandom\Resume\ResourceServlet; |
||
11 | use DaveRandom\Resume\SendFileFailureException; |
||
12 | use DaveRandom\Resume\UnreadableFileException; |
||
13 | use DaveRandom\Resume\UnsatisfiableRangeException; |
||
14 | use Symfony\Component\HttpFoundation\Response; |
||
15 | |||
16 | class PHPStreamer extends Streamer implements DirectStreamerInterface |
||
17 | { |
||
18 | public function stream() |
||
19 | { |
||
20 | try { |
||
21 | $rangeSet = RangeSet::createFromHeader(get_request_header('Range')); |
||
22 | $resource = new FileResource($this->song->path); |
||
23 | (new ResourceServlet($resource))->sendResource($rangeSet); |
||
24 | } catch (InvalidRangeHeaderException $e) { |
||
25 | abort(Response::HTTP_BAD_REQUEST); |
||
26 | } catch (UnsatisfiableRangeException $e) { |
||
27 | abort(Response::HTTP_REQUESTED_RANGE_NOT_SATISFIABLE); |
||
28 | } catch (NonExistentFileException $e) { |
||
29 | abort(Response::HTTP_NOT_FOUND); |
||
30 | } catch (UnreadableFileException $e) { |
||
31 | abort(Response::HTTP_INTERNAL_SERVER_ERROR); |
||
32 | } catch (SendFileFailureException $e) { |
||
33 | abort_unless(headers_sent(), Response::HTTP_INTERNAL_SERVER_ERROR); |
||
34 | echo "An error occurred while attempting to send the requested resource: {$e->getMessage()}"; |
||
35 | } |
||
36 | |||
37 | exit; |
||
0 ignored issues
–
show
|
|||
38 | } |
||
39 | } |
||
40 |
In general, usage of exit should be done with care and only when running in a scripting context like a CLI script.