allow passing a stream to StreamResponse

Signed-off-by: Robin Appelman <robin@icewind.nl>
This commit is contained in:
Robin Appelman 2016-10-27 14:46:28 +02:00
parent 0ee958595e
commit 4235b18a88
No known key found for this signature in database
GPG Key ID: 425003AC385454C5
3 changed files with 10 additions and 5 deletions

View File

@ -48,12 +48,17 @@ class Output implements IOutput {
}
/**
* @param string $path
* @param string|resource $path or file handle
*
* @return bool false if an error occurred
*/
public function setReadfile($path) {
return @readfile($path);
if (is_resource($path)) {
$output = fopen('php://output', 'w');
return stream_copy_to_stream($path, $output) > 0;
} else {
return @readfile($path);
}
}
/**

View File

@ -39,7 +39,7 @@ interface IOutput {
public function setOutput($out);
/**
* @param string $path
* @param string|resource $path or file handle
*
* @return bool false if an error occurred
* @since 8.1.0

View File

@ -37,7 +37,7 @@ class StreamResponse extends Response implements ICallbackResponse {
private $filePath;
/**
* @param string $filePath the path to the file which should be streamed
* @param string|resource $filePath the path to the file or a file handle which should be streamed
* @since 8.1.0
*/
public function __construct ($filePath) {
@ -54,7 +54,7 @@ class StreamResponse extends Response implements ICallbackResponse {
public function callback (IOutput $output) {
// handle caching
if ($output->getHttpResponseCode() !== Http::STATUS_NOT_MODIFIED) {
if (!file_exists($this->filePath)) {
if (!(file_exists($this->filePath) || is_resource($this->filePath))) {
$output->setHttpResponseCode(Http::STATUS_NOT_FOUND);
} elseif ($output->setReadfile($this->filePath) === false) {
$output->setHttpResponseCode(Http::STATUS_BAD_REQUEST);