Source of file HttpResponse.php
Size: 5,344 Bytes - Last Modified: 2014-03-12T23:21:18+01:00
/home/theseer/Downloads/ZendFramework-2.3.0/library/Zend/Feed/PubSubHubbub/HttpResponse.php
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212 | <?php /** * Zend Framework (http://framework.zend.com/) * * @link http://github.com/zendframework/zf2 for the canonical source repository * @copyright Copyright (c) 2005-2014 Zend Technologies USA Inc. (http://www.zend.com) * @license http://framework.zend.com/license/new-bsd New BSD License */ namespace Zend\Feed\PubSubHubbub; class HttpResponse { /** * The body of any response to the current callback request * * @var string */ protected $content = ''; /** * Array of headers. Each header is an array with keys 'name' and 'value' * * @var array */ protected $headers = array(); /** * HTTP response code to use in headers * * @var int */ protected $statusCode = 200; /** * Send the response, including all headers * * @return void */ public function send() { $this->sendHeaders(); echo $this->getContent(); } /** * Send all headers * * Sends any headers specified. If an {@link setHttpResponseCode() HTTP response code} * has been specified, it is sent with the first header. * * @return void */ public function sendHeaders() { if (count($this->headers) || (200 != $this->statusCode)) { $this->canSendHeaders(true); } elseif (200 == $this->statusCode) { return; } $httpCodeSent = false; foreach ($this->headers as $header) { if (!$httpCodeSent && $this->statusCode) { header($header['name'] . ': ' . $header['value'], $header['replace'], $this->statusCode); $httpCodeSent = true; } else { header($header['name'] . ': ' . $header['value'], $header['replace']); } } if (!$httpCodeSent) { header('HTTP/1.1 ' . $this->statusCode); } } /** * Set a header * * If $replace is true, replaces any headers already defined with that * $name. * * @param string $name * @param string $value * @param bool $replace * @return \Zend\Feed\PubSubHubbub\HttpResponse */ public function setHeader($name, $value, $replace = false) { $name = $this->_normalizeHeader($name); $value = (string) $value; if ($replace) { foreach ($this->headers as $key => $header) { if ($name == $header['name']) { unset($this->headers[$key]); } } } $this->headers[] = array( 'name' => $name, 'value' => $value, 'replace' => $replace, ); return $this; } /** * Check if a specific Header is set and return its value * * @param string $name * @return string|null */ public function getHeader($name) { $name = $this->_normalizeHeader($name); foreach ($this->headers as $header) { if ($header['name'] == $name) { return $header['value']; } } } /** * Return array of headers; see {@link $headers} for format * * @return array */ public function getHeaders() { return $this->headers; } /** * Can we send headers? * * @param bool $throw Whether or not to throw an exception if headers have been sent; defaults to false * @return HttpResponse * @throws Exception\RuntimeException */ public function canSendHeaders($throw = false) { $ok = headers_sent($file, $line); if ($ok && $throw) { throw new Exception\RuntimeException('Cannot send headers; headers already sent in ' . $file . ', line ' . $line); } return !$ok; } /** * Set HTTP response code to use with headers * * @param int $code * @return HttpResponse * @throws Exception\InvalidArgumentException */ public function setStatusCode($code) { if (!is_int($code) || (100 > $code) || (599 < $code)) { throw new Exception\InvalidArgumentException('Invalid HTTP response' . ' code:' . $code); } $this->statusCode = $code; return $this; } /** * Retrieve HTTP response code * * @return int */ public function getStatusCode() { return $this->statusCode; } /** * Set body content * * @param string $content * @return \Zend\Feed\PubSubHubbub\HttpResponse */ public function setContent($content) { $this->content = (string) $content; $this->setHeader('content-length', strlen($content)); return $this; } /** * Return the body content * * @return string */ public function getContent() { return $this->content; } /** * Normalizes a header name to X-Capitalized-Names * * @param string $name * @return string */ protected function _normalizeHeader($name) { $filtered = str_replace(array('-', '_'), ' ', (string) $name); $filtered = ucwords(strtolower($filtered)); $filtered = str_replace(' ', '-', $filtered); return $filtered; } } |