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);
}
?>
gzuncompress
(PHP 4 >= 4.0.1, PHP 5)
gzuncompress — Descomprime una cadena comprimida
Descripción
string gzuncompress
( string $datos
[, int $longitud
] )
Esta función descomprime una cadena comprimida.
Lista de parámetros
- datos
-
Los datos comprimidos por gzcompress().
- longitud
-
La longitud máxima a decodificar o descomprimir.
Valores retornados
Los datos originales sin compresió o FALSE en error.
La función regresará un error si los datos sin comprimir son mas que 32768 veces la longitud de los datos de entrada, o mayor al parámetro opcional longitud .
Ejemplos
Example #1 Ejemplo de gzuncompress()
<?php
$compressed = gzcompress('Compress me', 9);
$uncompressed = gzuncompress($compressed);
echo $uncompressed;
?>
gzuncompress
heavyccasey at gmail dot com
08-Nov-2007 05:30
08-Nov-2007 05:30
gabriel at bumpt dot n-et
18-Sep-2007 12:08
18-Sep-2007 12:08
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.
emanuele at fondani dot it
25-Nov-2006 12:21
25-Nov-2006 12:21
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
chappy at citromail dot hu
13-Apr-2006 04:47
13-Apr-2006 04:47
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<br>';
}
echo $content;
?>
