@@ -231,33 +231,36 @@ public function prepare(Request $request)
231231 $ this ->headers ->set ($ type , $ path );
232232 $ this ->maxlen = 0 ;
233233 }
234- } elseif ($ request ->headers ->has ('Range ' )) {
234+ } elseif ($ request ->headers ->has ('Range ' ) && $ request -> isMethod ( ' GET ' ) ) {
235235 // Process the range headers.
236236 if (!$ request ->headers ->has ('If-Range ' ) || $ this ->hasValidIfRangeHeader ($ request ->headers ->get ('If-Range ' ))) {
237237 $ range = $ request ->headers ->get ('Range ' );
238238
239- list ($ start , $ end ) = explode ('- ' , substr ($ range , 6 ), 2 ) + [0 ];
239+ if (0 === strpos ($ range , 'bytes= ' )) {
240+ list ($ start , $ end ) = explode ('- ' , substr ($ range , 6 ), 2 ) + [0 ];
240241
241- $ end = ('' === $ end ) ? $ fileSize - 1 : (int ) $ end ;
242+ $ end = ('' === $ end ) ? $ fileSize - 1 : (int ) $ end ;
242243
243- if ('' === $ start ) {
244- $ start = $ fileSize - $ end ;
245- $ end = $ fileSize - 1 ;
246- } else {
247- $ start = (int ) $ start ;
248- }
244+ if ('' === $ start ) {
245+ $ start = $ fileSize - $ end ;
246+ $ end = $ fileSize - 1 ;
247+ } else {
248+ $ start = (int ) $ start ;
249+ }
249250
250- if ($ start <= $ end ) {
251- if ($ start < 0 || $ end > $ fileSize - 1 ) {
252- $ this ->setStatusCode (416 );
253- $ this ->headers ->set ('Content-Range ' , sprintf ('bytes */%s ' , $ fileSize ));
254- } elseif (0 !== $ start || $ end !== $ fileSize - 1 ) {
255- $ this ->maxlen = $ end < $ fileSize ? $ end - $ start + 1 : -1 ;
256- $ this ->offset = $ start ;
257-
258- $ this ->setStatusCode (206 );
259- $ this ->headers ->set ('Content-Range ' , sprintf ('bytes %s-%s/%s ' , $ start , $ end , $ fileSize ));
260- $ this ->headers ->set ('Content-Length ' , $ end - $ start + 1 );
251+ if ($ start <= $ end ) {
252+ $ end = min ($ end , $ fileSize - 1 );
253+ if ($ start < 0 || $ start > $ end ) {
254+ $ this ->setStatusCode (416 );
255+ $ this ->headers ->set ('Content-Range ' , sprintf ('bytes */%s ' , $ fileSize ));
256+ } elseif ($ end - $ start < $ fileSize - 1 ) {
257+ $ this ->maxlen = $ end < $ fileSize ? $ end - $ start + 1 : -1 ;
258+ $ this ->offset = $ start ;
259+
260+ $ this ->setStatusCode (206 );
261+ $ this ->headers ->set ('Content-Range ' , sprintf ('bytes %s-%s/%s ' , $ start , $ end , $ fileSize ));
262+ $ this ->headers ->set ('Content-Length ' , $ end - $ start + 1 );
263+ }
261264 }
262265 }
263266 }
0 commit comments