使用PHP输出缓冲区压缩缓存的输出

时间:2014-11-05 06:44:38

标签: php html caching output-buffering ob-start

通过在页面顶部使用这一行代码ob_start('ob_gzhandler');,根据Chrome控制台,php输出大约为11 kb。当我尝试使用以下代码缓存输出时,我发现缓存的文件保存了大约65kb。更大的输出大小是缓存的折衷吗?有没有办法进一步压缩缓存的输出?我已经尝试为html压缩添加一些htaccess规则,但我认为这没有帮助。

$id = $_GET["id"];
$cachefile ="cache/p_{$id}.html";
if (file_exists($cachefile)) {
 include($cachefile);
 echo "<!-- Cached ".date('jS F Y H:i', filemtime($cachefile))." -->";
 exit;
}
ob_start('ob_gzhandler');

$fp = fopen($cachefile, 'w'); // open the cache file for writing
fwrite($fp, ob_get_contents()); // save the contents of output buffer to the file
fclose($fp); // close the file
ob_end_flush(); 

1 个答案:

答案 0 :(得分:1)

您的缓存文件未被服务器gziped,请尝试以下方式:

ob_start('ob_gzhandler');
$id = $_GET["id"];
$cachefile ="cache/p_{$id}.html";
if (file_exists($cachefile)) {
    include($cachefile);
    echo "<!-- Cached ".date('jS F Y H:i', filemtime($cachefile))." -->";
} else {
    // your html or something else ...
    $fp = fopen($cachefile, 'w'); // open the cache file for writing
    fwrite($fp, ob_get_contents()); // save the contents of output buffer to the file
    fclose($fp); // close the file
}
ob_end_flush(); 

P.S。我将此任务压缩到Web服务器(nginxapache)。