@@ -239,33 +239,36 @@ public function prepare(Request $request)
239
239
$ this ->headers ->set ($ type , $ path );
240
240
$ this ->maxlen = 0 ;
241
241
}
242
- } elseif ($ request ->headers ->has ('Range ' )) {
242
+ } elseif ($ request ->headers ->has ('Range ' ) && $ request -> isMethod ( ' GET ' ) ) {
243
243
// Process the range headers.
244
244
if (!$ request ->headers ->has ('If-Range ' ) || $ this ->hasValidIfRangeHeader ($ request ->headers ->get ('If-Range ' ))) {
245
245
$ range = $ request ->headers ->get ('Range ' );
246
246
247
- list ($ start , $ end ) = explode ('- ' , substr ($ range , 6 ), 2 ) + [0 ];
247
+ if (0 === strpos ($ range , 'bytes= ' )) {
248
+ list ($ start , $ end ) = explode ('- ' , substr ($ range , 6 ), 2 ) + [0 ];
248
249
249
- $ end = ('' === $ end ) ? $ fileSize - 1 : (int ) $ end ;
250
+ $ end = ('' === $ end ) ? $ fileSize - 1 : (int ) $ end ;
250
251
251
- if ('' === $ start ) {
252
- $ start = $ fileSize - $ end ;
253
- $ end = $ fileSize - 1 ;
254
- } else {
255
- $ start = (int ) $ start ;
256
- }
252
+ if ('' === $ start ) {
253
+ $ start = $ fileSize - $ end ;
254
+ $ end = $ fileSize - 1 ;
255
+ } else {
256
+ $ start = (int ) $ start ;
257
+ }
257
258
258
- if ($ start <= $ end ) {
259
- if ($ start < 0 || $ end > $ fileSize - 1 ) {
260
- $ this ->setStatusCode (416 );
261
- $ this ->headers ->set ('Content-Range ' , sprintf ('bytes */%s ' , $ fileSize ));
262
- } elseif (0 !== $ start || $ end !== $ fileSize - 1 ) {
263
- $ this ->maxlen = $ end < $ fileSize ? $ end - $ start + 1 : -1 ;
264
- $ this ->offset = $ start ;
265
-
266
- $ this ->setStatusCode (206 );
267
- $ this ->headers ->set ('Content-Range ' , sprintf ('bytes %s-%s/%s ' , $ start , $ end , $ fileSize ));
268
- $ this ->headers ->set ('Content-Length ' , $ end - $ start + 1 );
259
+ if ($ start <= $ end ) {
260
+ $ end = min ($ end , $ fileSize - 1 );
261
+ if ($ start < 0 || $ start > $ end ) {
262
+ $ this ->setStatusCode (416 );
263
+ $ this ->headers ->set ('Content-Range ' , sprintf ('bytes */%s ' , $ fileSize ));
264
+ } elseif ($ end - $ start < $ fileSize - 1 ) {
265
+ $ this ->maxlen = $ end < $ fileSize ? $ end - $ start + 1 : -1 ;
266
+ $ this ->offset = $ start ;
267
+
268
+ $ this ->setStatusCode (206 );
269
+ $ this ->headers ->set ('Content-Range ' , sprintf ('bytes %s-%s/%s ' , $ start , $ end , $ fileSize ));
270
+ $ this ->headers ->set ('Content-Length ' , $ end - $ start + 1 );
271
+ }
269
272
}
270
273
}
271
274
}
0 commit comments