Delicious Bookmark this on Delicious Share on Facebook SlashdotSlashdot It! Digg! Digg



PHP : Function Reference : Zlib Compression Functions : gzuncompress

gzuncompress

Uncompress a compressed string (PHP 4 >= 4.0.1, PHP 5)
string gzuncompress ( string data [, int length] )

Example 2734. gzuncompress() example

<?php
$compressed  
= gzcompress('Compress me', 9);
$uncompressed = gzuncompress($compressed);
echo
$uncompressed;
?>

Code Examples / Notes » gzuncompress

gabriel

To uncompress in PHP a string that has been compressed using MySQL's COMPRESS() function, you need to discard the first four bytes of the binary data:
<?php
 /*
  * Example:
  *
  * insert into mytable (myfield, ...) values (COMPRESS('foobar'), ...)
  *
  * then:
  */
$compressed = //...select myfield from mytable where...
 /*
  * then:
  */
$uncompressed = gzuncompress(substr($compressed, 4));
?>
Of course, you can use MySQL's UNCOMPRESS() function.
I was just providing an alternate method.


chappy

Reading an ID3v2.3+ tag it is versy useful, because these tag's frames might be compressed. Zlib compressed frame layout (ID3v2.3):
Descriptior                                                    Size
-------------------
Frameheader:
Frame id:                                                      4 bytes
Frame size (full frame size - frameheader size): 4 bytes
Frame flags:                                                  2 bytes
   The 2nd byte's 7th bit must be 1 (e.g.: %1xy00000)
Frame content decrompessed size:                   4 bytes
--------------------
Framecontent:
Compressed string                                          described in 'frame size'
<?php
$frame="[read from a mp3 file]";
$frame_id=substr($frame,0,4);
/*....*/
$cs=substr($frame,10,4);
$checksize=$cs[3]*16777216+$cs[2]*65536+$cs[1]*256+$cs[0];
$content=substr($frame,14,$contentsize);
$content=gzuncompress($content);
if(strlen($content)!=$checksize){
   echo 'Error whil uncrompessing frame data
';
}
echo $content;
?>


emanuele

Note that the manual states that the input parameter must be a string compressed with gzcompress(), so it is not guaranteed that it will compress ANY zlib compressed string.
I realized this while decompressing some compressed string in a pdf file. The gzuncompress() function produces a data error, but the string can be successfully decompressed with other zlib decompressors.
More info here:
http://bugs.php.net/?id=39616


heavyccasey

Note that gzuncompress() may not decompress some compressed strings and return a Data Error.
The problem could be that the outside compressed string has a CRC32 checksum at the end of the file instead of Adler-32, like PHP expects.
Workaround:
<?php
function gzuncompress_crc32($data) {
$f = tempnam('/tmp', 'gz_fix');
file_put_contents($f, "\x1f\x8b\x08\x00\x00\x00\x00\x00" . $data);
return file_get_contents('compress.zlib://' . $f);
}
?>


Change Language


Follow Navioo On Twitter
gzclose
gzcompress
gzdecode
gzdeflate
gzencode
gzeof
gzfile
gzgetc
gzgets
gzgetss
gzinflate
gzopen
gzpassthru
gzputs
gzread
gzrewind
gzseek
gztell
gzuncompress
gzwrite
readgzfile
zlib_get_coding_type
eXTReMe Tracker