如何调用ob_start之后调用ob_gzhandler?

时间:2015-04-12 10:35:44

标签: php output gzip minify

我正在使用this answer中的代码来缩小HTML,然后使用ob_gzhandler来gzip页面(因为mode_deflate在我的共享服务器上被禁用,因此我无法gzip in .htaccess) :

function sanitize_output($buffer) {

    $buffer = preg_replace('/[\r\n]+\s*/', '', $buffer);

    return $buffer;
}

ob_start("sanitize_output");
if(!ob_start("ob_gzhandler")) ob_start();

ob_start("sanitize_output")ob_start("ob_gzhandler")都可以自行运行,但是将它们组合会导致内容编码错误:

enter image description here

我该怎么办?

1 个答案:

答案 0 :(得分:0)

您需要在ob_start("ob_gzhandler")

之前加ob_start("sanitize_output")
function sanitize_output($buffer) {
    $buffer = preg_replace('/[\r\n]+\s*/', '', $buffer);
    return $buffer;
}
if(substr_count($_SERVER['HTTP_ACCEPT_ENCODING'], 'gzip')){
    ob_end_clean();
    ob_start('ob_gzhandler');
    ob_start("sanitize_output");
}
else {
    ob_start();
}

不要忘记最后使用ob_end_flush();