3 namespace Services\Http
;
5 use Services\Http\IHttpResponse
;
8 class HttpResponse
implements IHttpResponse
10 private $_statusCode = 200;
11 private $_headers = array();
13 private $_isRedirect = false
;
15 public function setStatusCode($code)
17 if(!is_int($code) ||
(100 > $code) ||
(599 < $code)) {
18 throw new Exception(sprintf('Invalid HTTP response code, %u', $code));
21 $this->_isRedirect
= (300 <= $code) && (307 >= $code);
22 $this->_statusCode
= $code;
27 public function isRedirect()
29 return $this->_isRedirect
;
32 public function setHeader($name, $value)
34 $value = (string) $value;
36 $this->_headers
[$name] = $value;
41 public function getHeaders()
43 return $this->_headers
;
46 private function sendHeaders()
48 $statusCodeSent = false
;
50 if(!count($this->_headers
)) {
54 foreach($this->_headers
as $headerName => $headerValue) {
55 if(!$statusCodeSent) {
57 sprintf('%s: %s', $headerName, $headerValue),
61 $statusCodeSent = true
;
64 sprintf('%s: %s', $headerName, $headerValue));
71 public function setBody($content)
73 $this->_body
= $content;
78 public function getBody()
84 private function sendBody()
91 public function sendResponse()
97 public function download($path)
99 $this->sendResponse();
100 $fd = fopen($path, 'r');
101 if(!$fd) throw new Exception ('Failed to open file.');
104 $buffer = fread($fd, 2048);