zlib_encode()的意外输出


Unexpected output with zlib_encode()

我试图用PHP编码二进制数据块,就像zlib的compress2()函数一样。然而,使用zlib_encode(),我得到了错误的编码输出。我知道这一点,因为我有一个C程序可以(正确地)做到这一点。当我将C程序的输出(使用十六进制编辑器)与下面的PHP脚本的输出进行比较时,我注意到它们根本不匹配。

我想我的问题是,这真的压缩在相同的方式zlib的compress2()函数吗?

<?php
$filename = 'C:'data.bin';
$in = fopen($filename, 'rb');
$data = fread($in, filesize($filename));
fclose($in);
$data_dec = zlib_decode($data);
$data_enc = zlib_encode($data_dec, ZLIB_ENCODING_DEFLATE, 9);
?>

压缩级别是正确的,因此它应该与C程序的编码输出相匹配。也许某处有bug…div ?

是,zlib_encode()(带默认参数)和uncompress()兼容,compress2()zlib_decode()兼容。

检查的方法是而不是来比较压缩后的输出。通过使用uncompress()zlib_decode()解压来检查。没有理由期望压缩后的输出是相同的,也不需要。重要的是它可以在另一端无损解压缩。