@@ -231,33 +231,36 @@ public function prepare(Request $request)
231
231
$ this ->headers ->set ($ type , $ path );
232
232
$ this ->maxlen = 0 ;
233
233
}
234
- } elseif ($ request ->headers ->has ('Range ' )) {
234
+ } elseif ($ request ->headers ->has ('Range ' ) && $ request -> isMethod ( ' GET ' ) ) {
235
235
// Process the range headers.
236
236
if (!$ request ->headers ->has ('If-Range ' ) || $ this ->hasValidIfRangeHeader ($ request ->headers ->get ('If-Range ' ))) {
237
237
$ range = $ request ->headers ->get ('Range ' );
238
238
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 ];
240
241
241
- $ end = ('' === $ end ) ? $ fileSize - 1 : (int ) $ end ;
242
+ $ end = ('' === $ end ) ? $ fileSize - 1 : (int ) $ end ;
242
243
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
+ }
249
250
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
+ }
261
264
}
262
265
}
263
266
}
0 commit comments