PHP 实现 GZIP 压缩处理

ob_start();
ob_implicit_flush(0);
$HTTP_ACCEPT_ENCODING = $_SERVER['HTTP_ACCEPT_ENCODING'];
function CheckCanGzip()
{
    global $HTTP_ACCEPT_ENCODING;
    if (headers_sent() || connection_aborted()){
        return 0;
    }
    if (strpos($HTTP_ACCEPT_ENCODING, 'x-gzip') !== false) return "x-gzip";
    if (strpos($HTTP_ACCEPT_ENCODING,'gzip') !== false) return "gzip";
    return 0;
}
/* $level = compression level 0-9, 0=none, 9=max */

function GzDocOut($level=1,$debug=0){
    $ENCODING = CheckCanGzip(); 
    if ($ENCODING){
        $Contents = ob_get_contents();
        ob_end_clean();
        if ($debug){
            $s = "<p>Not compress length: ".strlen($Contents);
            $s .= "
            Compressed length: ".strlen(gzcompress($Contents,$level));
            $Contents .= $s;
        }

        //header("Content-Encoding: gzip");
      
        $Size = strlen($Contents);
        $Crc  = crc32($Contents);
        $Contents = gzcompress($Contents,$level);
        $Contents = substr($Contents, 0, strlen($Contents) - 4);
        print $Contents;
        print pack('V',$Crc);
        print pack('V',$Size);
        exit;
    }else{
        ob_end_flush();
        exit;
    }
}

 

posted @ 2020-03-31 18:45  王默默  阅读(1570)  评论(0编辑  收藏  举报