The correct function for gzip and chunked data particularly when you get "Content-Encoding: gzip" and "Transfer-Encoding: chunked" headers:
<?php
function decode_gzip($h,$d,$rn="\r\n"){
if (isset($h['Transfer-Encoding'])){
$lrn = strlen($rn);
$str = '';
$ofs=0;
do{
$p = strpos($d,$rn,$ofs);
$len = hexdec(substr($d,$ofs,$p-$ofs));
$str .= substr($d,$p+$lrn,$len);
$ofs = $p+$lrn*2+$len;
}while ($d[$ofs]!=='0');
$d=$str;
}
if (isset($h['Content-Encoding'])) $d = gzinflate(substr($d,10));
return $d;
}
?>
Enjoy!
gzinflate
(PHP 4 >= 4.0.4, PHP 5)
gzinflate — Décompresse une chaîne
Description
string gzinflate
( string $data
[, int $length= 0
] )
gzinflate() décompresse une chaîne.
Liste de paramètres
- data
-
Les données compressées avec la fonction gzdeflate().
- length
-
La longueur maximale de données à décoder.
Valeurs de retour
Les données originales décompressées ou FALSE si une erreur survient.
gzinflate() retourne une erreur si la chaîne décompressée est plus de 32768 fois plus longue que la chaîne compressée data ou plus grande que la taille de length octets, passé comme paramètre optionnel.
Exemples
Exemple #1 Exemple avec gzinflate()
<?php
$compressed = gzdeflate('Compresse moi', 9);
$uncompressed = gzinflate($compressed);
echo $uncompressed;
?>
Voir aussi
- gzdeflate() - Compresse une chaîne
- gzcompress() - Compresse une chaîne
- gzuncompress() - Décompresse une chaîne compressée
- gzencode() - Crée une chaîne compressée gzip
gzinflate
vitall at ua dot fm
10-Sep-2009 12:10
10-Sep-2009 12:10
John
13-Jun-2008 05:22
13-Jun-2008 05:22
And when retrieving mod_deflate gzip'ed content and using gzinflate() to decode the data, be sure to strip the first 11 chars from the retrieved content.
<?php $dec = gzinflate(substr($enc,11)); ?>
patatraboum at free dot fr
24-Aug-2007 05:57
24-Aug-2007 05:57
Some gz string strip header and return inflated
It actualy processes some first member of the gz
See rfc1952 at http://www.faqs.org/rfcs/rfc1952.html for more details and improvment as gzdecode
<?php
function gzBody($gzData){
if(substr($gzData,0,3)=="\x1f\x8b\x08"){
$i=10;
$flg=ord(substr($gzData,3,1));
if($flg>0){
if($flg&4){
list($xlen)=unpack('v',substr($gzData,$i,2));
$i=$i+2+$xlen;
}
if($flg&8) $i=strpos($gzData,"\0",$i)+1;
if($flg&16) $i=strpos($gzData,"\0",$i)+1;
if($flg&2) $i=$i+2;
}
return gzinflate(substr($gzData,$i,-8));
}
else return false;
}
?>
spikeles_ at hotmail dot com
02-Nov-2006 04:12
02-Nov-2006 04:12
This can be used to inflate streams compressed by the Java class java.util.zip.Deflater but you must strip the first 2 bytes off it. ( much like the above comment )
<?php $result = gzinflate(substr($compressedData, 2)); ?>
boris at gamate dot com
08-Jul-2003 12:49
08-Jul-2003 12:49
When retrieving mod_gzip'ed content and using gzinflate() to decode the data, be sure to strip the first 10 chars from the retrieved content.
<?php $dec = gzinflate(substr($enc,10)); ?>
