aboutsummaryrefslogtreecommitdiffstats
path: root/public/system/library/response.php
diff options
context:
space:
mode:
Diffstat (limited to 'public/system/library/response.php')
-rw-r--r--public/system/library/response.php121
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('&amp;', "\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;
+ }
+ }
+}