Php gzdeflate()和大量数据

Php gzdeflate()和大量数据,php,zlib,deflate,Php,Zlib,Deflate,我一直在构建一个用PHP创建ZIP文件的类。ZipArchive的替代方案,假设服务器中不允许ZipArchive。与那些免费服务器一起使用的东西 它已经开始工作了,使用PHP构建ZIP结构,并使用gzdeflate()生成压缩数据 问题是,gzdeflate()要求我将整个文件加载到内存中,我希望该类的内存限制为32MB。目前,它存储的文件大于16MB,完全没有压缩 我想我应该让它以块的形式压缩数据,16MB乘以16MB,但我不知道如何连接两个gzdeflate()的结果 我一直在测试它,它似

我一直在构建一个用PHP创建ZIP文件的类。ZipArchive的替代方案,假设服务器中不允许ZipArchive。与那些免费服务器一起使用的东西

它已经开始工作了,使用PHP构建ZIP结构,并使用gzdeflate()生成压缩数据

问题是,gzdeflate()要求我将整个文件加载到内存中,我希望该类的内存限制为32MB。目前,它存储的文件大于16MB,完全没有压缩

我想我应该让它以块的形式压缩数据,16MB乘以16MB,但我不知道如何连接两个gzdeflate()的结果

我一直在测试它,它似乎需要在最后16位进行一些数学运算,有点像
buff->last16bits=(buff->last16bits&newblock->first16bits)| 0xfffe
,它可以工作,但不是对所有样本都有效


问题:如何在不解压缩的情况下连接两个放气流?

这可能有帮助,也可能没有帮助。看起来gzwrite将允许您在不将文件完全加载到内存的情况下编写文件。PHP手册页面中的这个例子展示了如何使用gzwrite和fopen压缩文件


PHP流过滤器用于执行此类任务。可以在读取或写入流时使用。比如说

    $fp = fopen($path, 'r');
    stream_filter_append($fp, 'zlib.deflate', STREAM_FILTER_READ);

现在,
fread
将返回压缩数据。

也许我可以使用它从结果文件中获取压缩数据,但这将是一个大混乱。。。一定有什么办法…你是想把压缩的数据流出来吗?我刚刚修改了代码。现在它将直接输出到屏幕,这样你就可以流式处理大文件了。不,我正在尝试构建ZIP文件。在zlib defate()中有一个Z_NO_FLUSH标志来实现这一点,但是PHP gzdeflate()不…哈哈,三年后才有了答案!我甚至没有测试它,但它确实是一个非常好的把戏,谢谢你,好先生!
    $fp = fopen($path, 'r');
    stream_filter_append($fp, 'zlib.deflate', STREAM_FILTER_READ);