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 @   王默默  阅读(3047)  评论(0编辑  收藏  举报
编辑推荐:
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
历史上的今天:
2018-03-31 linux 网络命令
点击右上角即可分享
微信分享提示