如何使用它進行_增量_解壓縮並不顯而易見
您將_壓縮數據_ _分段_ 提供給 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() 的限制。