| Mark Adler 2004-11-11, 3:55 pm |
| tthunder@gmx.de (Kirsten) wrote in message news:<911abfed.0411110245.359851f4@posting.google.com>...
> today I have implemented the ZLib library (1.2.1) in my C++ project.
> Using the function compress2(...) (Compression level 1) I have encoded
> my string.
>
> Then I wanted to uncompress the string with PHP on my server, but here
> the error:
> Warning: gzuncompress(): buffer error in ...
From the zlib FAQ:
18. Why does gzip give an error on a file I make with compress/deflate?
The compress and deflate functions produce data in the zlib format, which
is different and incompatible with the gzip format. The gz* functions in
zlib on the other hand use the gzip format. Both the zlib and gzip
formats use the same compressed data format internally, but have different
headers and trailers around the compressed data.
19. Ok, so why are there two different formats?
The gzip format was designed to retain the directory information about
a single file, such as the name and last modification date. The zlib
format on the other hand was designed for in-memory and communication
channel applications, and has a much more compact header and trailer and
uses a faster integrity check than gzip.
20. Well that's nice, but how do I make a gzip file in memory?
You can request that deflate write the gzip format instead of the zlib
format using deflateInit2(). You can also request that inflate decode
the gzip format using inflateInit2(). Read zlib.h for more details.
Note that you cannot specify special gzip header contents (e.g. a file
name or modification date), nor will inflate tell you what was in the
gzip header. If you need to customize the header or see what's in it,
you can use the raw deflate and inflate operations and the crc32()
function and roll your own gzip encoding and decoding. Read the gzip
RFC 1952 for details of the header and trailer format.
mark
|