diff options
Diffstat (limited to 'public/system/library/response.php')
-rw-r--r-- | public/system/library/response.php | 121 |
1 files changed, 121 insertions, 0 deletions
diff --git a/public/system/library/response.php b/public/system/library/response.php new file mode 100644 index 0000000..e36d3c3 --- /dev/null +++ b/public/system/library/response.php @@ -0,0 +1,121 @@ +<?php +/** + * @package OpenCart + * @author Daniel Kerr + * @copyright Copyright (c) 2005 - 2017, OpenCart, Ltd. (https://www.opencart.com/) + * @license https://opensource.org/licenses/GPL-3.0 + * @link https://www.opencart.com +*/ + +/** +* Response class +*/ +class Response { + private $headers = array(); + private $level = 0; + private $output; + + /** + * Constructor + * + * @param string $header + * + */ + public function addHeader($header) { + $this->headers[] = $header; + } + + /** + * + * + * @param string $url + * @param int $status + * + */ + public function redirect($url, $status = 302) { + header('Location: ' . str_replace(array('&', "\n", "\r"), array('&', '', ''), $url), true, $status); + exit(); + } + + /** + * + * + * @param int $level + */ + public function setCompression($level) { + $this->level = $level; + } + + /** + * + * + * @return array + */ + public function getOutput() { + return $this->output; + } + + /** + * + * + * @param string $output + */ + public function setOutput($output) { + $this->output = $output; + } + + /** + * + * + * @param string $data + * @param int $level + * + * @return string + */ + private function compress($data, $level = 0) { + if (isset($_SERVER['HTTP_ACCEPT_ENCODING']) && (strpos($_SERVER['HTTP_ACCEPT_ENCODING'], 'gzip') !== false)) { + $encoding = 'gzip'; + } + + if (isset($_SERVER['HTTP_ACCEPT_ENCODING']) && (strpos($_SERVER['HTTP_ACCEPT_ENCODING'], 'x-gzip') !== false)) { + $encoding = 'x-gzip'; + } + + if (!isset($encoding) || ($level < -1 || $level > 9)) { + return $data; + } + + if (!extension_loaded('zlib') || ini_get('zlib.output_compression')) { + return $data; + } + + if (headers_sent()) { + return $data; + } + + if (connection_status()) { + return $data; + } + + $this->addHeader('Content-Encoding: ' . $encoding); + + return gzencode($data, (int)$level); + } + + /** + * + */ + public function output() { + if ($this->output) { + $output = $this->level ? $this->compress($this->output, $this->level) : $this->output; + + if (!headers_sent()) { + foreach ($this->headers as $header) { + header($header, true); + } + } + + echo $output; + } + } +} |