bp_media_get_download_range( int $file_size )
Parse the HTTP_RANGE request from iOS devices.
Description
Does not support multi-range requests.
Parameters
- $file_size
-
(Required) Size of file in bytes.
Return
(array) Information about range download request: beginning and length of file chunk, whether the range is valid/supported and whether the request is a range request
Source
File: bp-media/bp-media-filters.php
function bp_media_get_download_range( $file_size ) {
$start = 0;
$download_range = array(
'start' => $start,
'is_range_valid' => false,
'is_range_request' => false,
);
if ( ! $file_size ) {
return $download_range;
}
$end = $file_size - 1;
$download_range['length'] = $file_size;
if ( isset( $_SERVER['HTTP_RANGE'] ) ) { // @codingStandardsIgnoreLine.
$http_range = sanitize_text_field( wp_unslash( $_SERVER['HTTP_RANGE'] ) ); // WPCS: input var ok.
$download_range['is_range_request'] = true;
$c_start = $start;
$c_end = $end;
// Extract the range string.
list( , $range ) = explode( '=', $http_range, 2 );
// Make sure the client hasn't sent us a multibyte range.
if ( strpos( $range, ',' ) !== false ) {
return $download_range;
}
/*
* If the range starts with an '-' we start from the beginning.
* If not, we forward the file pointer
* and make sure to get the end byte if specified.
*/
if ( '-' === $range[0] ) {
// The n-number of the last bytes is requested.
$c_start = $file_size - substr( $range, 1 );
} else {
$range = explode( '-', $range );
$c_start = ( isset( $range[0] ) && is_numeric( $range[0] ) ) ? (int) $range[0] : 0;
$c_end = ( isset( $range[1] ) && is_numeric( $range[1] ) ) ? (int) $range[1] : $file_size;
}
/*
* Check the range and make sure it's treated according to the specs: http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html.
* End bytes can not be larger than $end.
*/
$c_end = ( $c_end > $end ) ? $end : $c_end;
// Validate the requested range and return an error if it's not correct.
if ( $c_start > $c_end || $c_start > $file_size - 1 || $c_end >= $file_size ) {
return $download_range;
}
$start = $c_start;
$end = $c_end;
$length = $end - $start + 1;
$download_range['start'] = $start;
$download_range['length'] = $length;
$download_range['is_range_valid'] = true;
}
return $download_range;
}
Changelog
| Version | Description |
|---|---|
| BuddyBoss 1.4.1 | Introduced. |
Questions?
We're always happy to help with code or other questions you might have! Search our developer docs, contact support, or connect with our sales team.