1
0
mirror of https://github.com/e107inc/e107.git synced 2025-08-04 13:47:31 +02:00

Issue #1430 Fixed gzip encoding issue

This commit is contained in:
Cameron
2016-03-19 17:14:22 -07:00
parent 9c50d76b62
commit 220d258915
3 changed files with 113 additions and 31 deletions

View File

@@ -2295,6 +2295,7 @@ class e_http_header
private $compression_browser_support = false; private $compression_browser_support = false;
private $compression_server_support = false; private $compression_server_support = false;
private $headers = array(); private $headers = array();
private $length = 0;
function __construct() function __construct()
@@ -2304,20 +2305,55 @@ class e_http_header
$this->compression_browser_support = true; $this->compression_browser_support = true;
} }
if(ini_get("zlib.output_compression") == '' && function_exists("gzencode")) if(ini_get("zlib.output_compression")=='' && function_exists("gzencode"))
{ {
$this->compression_server_support = true; $this->compression_server_support = true;
} }
$this->compress_output = varset(e107::getPref('compress_output'),false); if($this->compression_server_support == true && $this->compression_browser_support == true)
{
$this->compress_output = varset(e107::getPref('compress_output'),false);
}
else
{
$this->compress_output = false;
}
} }
function setContent($content) function setContent($content)
{ {
$this->etag = md5($content);
$this->content = $content; if($content == 'buffer')
{
$this->length = ob_get_length();
$this->content = ob_get_clean();
}
else
{
$this->content = $content;
$this->length = strlen($content);
}
$this->etag = md5($this->content);
//print_a($this->length);
// return $this->content;
}
/**
* Return Content (with or without encoding)
* @return mixed
*/
function getOutput()
{
return $this->content;
} }
function setHeader($header, $force=false, $response_code=null) function setHeader($header, $force=false, $response_code=null)
@@ -2327,17 +2363,23 @@ class e_http_header
header($header, $force, $response_code); header($header, $force, $response_code);
} }
function debug() function debug() // needs to be disabled if PHP gzip is to work
{ {
if(!ADMIN)
{
return null;
}
echo "<h3>Server Headers</h3>";
$text = "<h3>Server Headers</h3>";
$server = getallheaders(); $server = getallheaders();
ksort($server); ksort($server);
print_a($server); $text .= print_a($server,true);
echo "<h3>e107 Headers</h3>"; $text .= "<h3>e107 Headers</h3>";
ksort($this->headers); ksort($this->headers);
print_a($this->headers); $text .= print_a($this->headers,true);
var_dump($this->compress_output); $text .= "<h4>Compress Output</h4>";
$text .= print_a($this->compress_output,true);
$server = array(); $server = array();
foreach($_SERVER as $k=>$v) foreach($_SERVER as $k=>$v)
@@ -2347,8 +2389,21 @@ class e_http_header
$server[$k] = $v; $server[$k] = $v;
} }
} }
echo "<h3>_SERVER</h3>";
print_a($server); $text .= "<h3>_SERVER</h3>";
$text .= "<h4>zlib.output_compression</h4>";
$text .= print_a(ini_get("zlib.output_compression"),true);
$text .=print_a($server,true);
if($this->compress_output == true)
{
$text = gzencode($text, $this->compression_level);
}
echo $text;
} }
@@ -2390,27 +2445,29 @@ class e_http_header
} }
if($this->compress_out != false && $this->compression_server_support == true && $this->compression_browser_support == true) if($this->compress_output != false)
{ {
// $this->setHeader("ETag: \"{$this->etag}-gzip\""); // $this->setHeader("ETag: \"{$this->etag}-gzip\"");
$this->setHeader('ETag: "'.$this->etag.'-gzip"', true); $this->setHeader('ETag: "'.$this->etag.'-gzip"', true);
$page = gzencode($this->content, $this->compression_level); $this->content = gzencode($this->content, $this->compression_level);
$this->setHeader("Content-Encoding: gzip", true); $this->setHeader('Content-Encoding: gzip', true);
$this->setHeader("Content-Length: ".strlen($page), true); $this->setHeader("Content-Length: ".$this->length, true);
} }
else else
{ {
/*
if($this->compression_browser_support ==true) if($this->compression_browser_support ==true)
{ {
$this->setHeader('ETag: "'.$this->etag.'-gzip"', true); $this->setHeader('ETag: "'.$this->etag.'-gzip"', true);
} }
else else
{ {*/
$this->setHeader('ETag: "'.$this->etag.'"', true); $this->setHeader('ETag: "'.$this->etag.'"', true);
} // }
$this->setHeader("Content-Length: ".strlen($this->content), true); $this->setHeader("Content-Length: ".$this->length, true);
} }
if(defset('X-POWERED-BY') !== false) if(defset('X-POWERED-BY') !== false)

View File

@@ -411,19 +411,36 @@ if($tmp1)
// Shutdown // Shutdown
$e107->destruct(); $e107->destruct();
/*
if($tmp) if($tmp)
{ {
$page = str_replace($tmp['search'], $tmp['replace'], ob_get_clean()); $page = str_replace($tmp['search'], $tmp['replace'], ob_get_clean());
} }
else else
{ {*/
$page = ob_get_clean();
} //$length = ob_get_length();
// $page = ob_get_clean();
// }
unset($tmp1, $tmp1); unset($tmp1, $tmp1);
// $page = ob_get_clean();
// New - see class2.php
$ehd = new e_http_header;
$ehd->setContent('buffer');
$ehd->send();
$page = $ehd->getOutput();
// $ehd->debug();
// real output
echo $page;
/*
$etag = md5($page); $etag = md5($page);
@@ -454,11 +471,11 @@ if(!defined('e_NOCACHE'))
$pref['compression_level'] = 6; $pref['compression_level'] = 6;
if (strstr(varset($_SERVER["HTTP_ACCEPT_ENCODING"], ""), "gzip")) if (strstr(varset($_SERVER["HTTP_ACCEPT_ENCODING"], ""), "gzip"))
{ {
$browser_support = true; // $browser_support = true;
} }
if (ini_get("zlib.output_compression") == false && function_exists("gzencode")) if (ini_get("zlib.output_compression") == false && function_exists("gzencode"))
{ {
$server_support = true; // $server_support = true;
} }
if (varset($pref['compress_output'], false) && $server_support == true && $browser_support == true) if (varset($pref['compress_output'], false) && $server_support == true && $browser_support == true)
{ {
@@ -482,7 +499,7 @@ else
header("Content-Length: ".strlen($page), true); header("Content-Length: ".strlen($page), true);
echo $page; echo $page;
} }*/
unset($In_e107_Footer); unset($In_e107_Footer);
$e107_Clean_Exit = TRUE; // For registered shutdown function -- let it know all is well! $e107_Clean_Exit = TRUE; // For registered shutdown function -- let it know all is well!

View File

@@ -380,14 +380,22 @@ $e107->destruct();
// //
// I Send the buffered page data, along with appropriate headers // I Send the buffered page data, along with appropriate headers
// //
$page = ob_get_clean(); //$length = ob_get_length();
//$page = ob_get_clean();
// New - see class2.php // New - see class2.php
$ehd = new e_http_header; $ehd = new e_http_header;
$ehd->setContent($page); $ehd->setContent('buffer');
$ehd->send(); $ehd->send();
// $ehd->debug(); // $ehd->debug();
$page = $ehd->getOutput();
//$ehd->setContent($page);
//$ehd->send($length);
// real output // real output
echo $page; echo $page;