Add ability to read response body from a file without reading the entire file into memory
This commit is contained in:
parent
a756adf933
commit
8049635837
|
|
@ -24,6 +24,10 @@ use pjdietz\WellRESTed\Interfaces\ResponseInterface;
|
||||||
*/
|
*/
|
||||||
class Response extends Message implements ResponseInterface
|
class Response extends Message implements ResponseInterface
|
||||||
{
|
{
|
||||||
|
const CHUNK_SIZE = 1048576;
|
||||||
|
|
||||||
|
/** @var string Path to a file to read and output as the body. */
|
||||||
|
private $bodyFilePath;
|
||||||
/**
|
/**
|
||||||
* Text explanation of the HTTP Status Code. You only need to set this if
|
* Text explanation of the HTTP Status Code. You only need to set this if
|
||||||
* you are using nonstandard status codes. Otherwise, the instance will
|
* you are using nonstandard status codes. Otherwise, the instance will
|
||||||
|
|
@ -80,6 +84,18 @@ class Response extends Message implements ResponseInterface
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** @param string $bodyFilePath Path to a file to read and output as the body */
|
||||||
|
public function setBodyFilePath($bodyFilePath)
|
||||||
|
{
|
||||||
|
$this->bodyFilePath = $bodyFilePath;
|
||||||
|
}
|
||||||
|
|
||||||
|
/** @return string Path to a file to read and output as the body */
|
||||||
|
public function getBodyFilePath()
|
||||||
|
{
|
||||||
|
return $this->bodyFilePath;
|
||||||
|
}
|
||||||
|
|
||||||
/** @return string Portion of the status line explaining the status. */
|
/** @return string Portion of the status line explaining the status. */
|
||||||
public function getReasonPhrase()
|
public function getReasonPhrase()
|
||||||
{
|
{
|
||||||
|
|
@ -268,8 +284,12 @@ class Response extends Message implements ResponseInterface
|
||||||
}
|
}
|
||||||
|
|
||||||
// Output the entity body.
|
// Output the entity body.
|
||||||
if (!$headersOnly && isset($this->body)) {
|
if (!$headersOnly) {
|
||||||
print $this->body;
|
if (isset($this->bodyFilePath) && $this->bodyFilePath && file_exists($this->bodyFilePath)) {
|
||||||
|
$this->outputBodyFile();
|
||||||
|
} else {
|
||||||
|
print $this->body;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -287,4 +307,18 @@ class Response extends Message implements ResponseInterface
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** Output the contents of a file */
|
||||||
|
private function outputBodyFile()
|
||||||
|
{
|
||||||
|
$handle = fopen($this->getBodyFilePath(), 'rb');
|
||||||
|
if ($handle === false) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
while (!feof($handle)) {
|
||||||
|
$buffer = fread($handle, self::CHUNK_SIZE);
|
||||||
|
print $buffer;
|
||||||
|
ob_flush();
|
||||||
|
flush();
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue