How to decode/inflate a chunked gzip string? How to decode/inflate a chunked gzip string? php php

How to decode/inflate a chunked gzip string?


The proper method to deflate a chunked response is roughly as follows:

initialise string to hold resultfor each chunk {  check that the stated chunk length equals the string length of the chunk  append the chunk data to the result variable}

Here's a handy PHP function to do that for you (FIXED):

function unchunk_string ($str) {  // A string to hold the result  $result = '';  // Split input by CRLF  $parts = explode("\r\n", $str);  // These vars track the current chunk  $chunkLen = 0;  $thisChunk = '';  // Loop the data  while (($part = array_shift($parts)) !== NULL) {    if ($chunkLen) {      // Add the data to the string      // Don't forget, the data might contain a literal CRLF      $thisChunk .= $part."\r\n";      if (strlen($thisChunk) == $chunkLen) {        // Chunk is complete        $result .= $thisChunk;        $chunkLen = 0;        $thisChunk = '';      } else if (strlen($thisChunk) == $chunkLen + 2) {        // Chunk is complete, remove trailing CRLF        $result .= substr($thisChunk, 0, -2);        $chunkLen = 0;        $thisChunk = '';      } else if (strlen($thisChunk) > $chunkLen) {        // Data is malformed        return FALSE;      }    } else {      // If we are not in a chunk, get length of the new one      if ($part === '') continue;      if (!$chunkLen = hexdec($part)) break;    }  }  // Return the decoded data of FALSE if it is incomplete  return ($chunkLen) ? FALSE : $result;}


To decode a String use gzinflate, Zend_Http_Client lib will help to do this kind of common tasks, its wasy to use, Refer Zend_Http_Response code if you need to do it on your own