如何使用它进行_增量_解压缩并不明显
你将_压缩数据_分成_小块_馈送到 inflate_add() 中。
zlib 上下文的内部状态将确保你可以在任何点分割并仍然获得正确的总数据,只要你一直读取到结束。
通过这种方式,你不必在任何时候将完整的未压缩数据保存在内存中(也不必将其具体化为 gzopen() 等的文件),从而允许你解析比可用 php 内存限制大得多的文件。
<?php
$step = 500000;
$dataGz = load_gzip_compressed_data_to_string();
$start = 0;
$outLen = 0;
$ctxt = inflate_init(ZLIB_ENCODING_GZIP);
$status = inflate_get_status($inflCtxt);
while($status == ZLIB_OK) {
$split = substr($dataGz, $start, $step);
$dataFragment = inflate_add($inflCtxt, $split);
$outLen += strlen($dataFragment);
$status = inflate_get_status($inflCtxt);
$start += $step;
}
echo '输入:' . strlen($dataGz) . ' 字节 / 输出:' . $outLen . ' 字节。';
?>
注意:极高压缩的归档文件仍然会因为愚蠢且不必要的内存耗尽而失败,因为无法在 inflate_init() 中定义类似于 gzuncompress() 的限制。