|
|
@ -28,6 +28,21 @@ class Response extends \yii\base\Response |
|
|
|
*/ |
|
|
|
*/ |
|
|
|
public $ajaxRedirectCode = 278; |
|
|
|
public $ajaxRedirectCode = 278; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
private $_headers; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
|
|
|
* Returns the header collection. |
|
|
|
|
|
|
|
* The header collection contains the currently registered HTTP headers. |
|
|
|
|
|
|
|
* @return HeaderCollection the header collection |
|
|
|
|
|
|
|
*/ |
|
|
|
|
|
|
|
public function getHeaders() |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
if ($this->_headers === null) { |
|
|
|
|
|
|
|
$this->_headers = new HeaderCollection; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
return $this->_headers; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
/** |
|
|
|
/** |
|
|
|
* Sends a file to user. |
|
|
|
* Sends a file to user. |
|
|
|
* @param string $fileName file name |
|
|
|
* @param string $fileName file name |
|
|
@ -51,7 +66,7 @@ class Response extends \yii\base\Response |
|
|
|
|
|
|
|
|
|
|
|
if (isset($_SERVER['HTTP_RANGE'])) { |
|
|
|
if (isset($_SERVER['HTTP_RANGE'])) { |
|
|
|
// client sent us a multibyte range, can not hold this one for now |
|
|
|
// client sent us a multibyte range, can not hold this one for now |
|
|
|
if (strpos($_SERVER['HTTP_RANGE'],',') !== false) { |
|
|
|
if (strpos($_SERVER['HTTP_RANGE'], ',') !== false) { |
|
|
|
header("Content-Range: bytes $contentStart-$contentEnd/$fileSize"); |
|
|
|
header("Content-Range: bytes $contentStart-$contentEnd/$fileSize"); |
|
|
|
throw new HttpException(416, 'Requested Range Not Satisfiable'); |
|
|
|
throw new HttpException(416, 'Requested Range Not Satisfiable'); |
|
|
|
} |
|
|
|
} |
|
|
@ -75,12 +90,12 @@ class Response extends \yii\base\Response |
|
|
|
* http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html |
|
|
|
* http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html |
|
|
|
*/ |
|
|
|
*/ |
|
|
|
// End bytes can not be larger than $end. |
|
|
|
// End bytes can not be larger than $end. |
|
|
|
$contentEnd = ($contentEnd > $fileSize) ? $fileSize -1 : $contentEnd; |
|
|
|
$contentEnd = ($contentEnd > $fileSize) ? $fileSize - 1 : $contentEnd; |
|
|
|
|
|
|
|
|
|
|
|
// Validate the requested range and return an error if it's not correct. |
|
|
|
// Validate the requested range and return an error if it's not correct. |
|
|
|
$wrongContentStart = ($contentStart > $contentEnd || $contentStart > $fileSize - 1 || $contentStart < 0); |
|
|
|
$wrongContentStart = ($contentStart > $contentEnd || $contentStart > $fileSize - 1 || $contentStart < 0); |
|
|
|
|
|
|
|
|
|
|
|
if ($wrongContentStart) { |
|
|
|
if ($wrongContentStart) { |
|
|
|
header("Content-Range: bytes $contentStart-$contentEnd/$fileSize"); |
|
|
|
header("Content-Range: bytes $contentStart-$contentEnd/$fileSize"); |
|
|
|
throw new HttpException(416, 'Requested Range Not Satisfiable'); |
|
|
|
throw new HttpException(416, 'Requested Range Not Satisfiable'); |
|
|
|
} |
|
|
|
} |
|
|
|