Search code examples
phpencodinggzipdecoding

Decode gzipped web page retrieved via cURL in PHP


I'm retrieving a gzipped web page via curl, but when I output the retrieved content to the browser I just get the raw gzipped data. How can I decode the data in PHP?

One method I found was to write the content to a tmp file and then ...

$f = gzopen($filename,"r");
$content = gzread($filename,250000);
gzclose($f);

.... but man, there's got to be a better way.

Edit: This isn't a file, but a gzipped html page returned by a web server.


Solution

  • The following command enables cURL's "auto encoding" mode, where it will announce to the server which encoding methods it supports (via the Accept-Encoding header), and then automatically decompress the response for you:

    // Allow cURL to use gzip compression, or any other supported encoding
    // A blank string activates 'auto' mode
    curl_setopt($ch, CURLOPT_ENCODING , '');
    

    If you specifically want to force the header to be Accept-Encoding: gzip you can use this command instead:

    // Allow cURL to use gzip compression, or any other supported encoding
    curl_setopt($ch, CURLOPT_ENCODING , 'gzip');
    

    Read more in the PHP documentation: curl_setopt.

    Thanks to commenters for helping improve this answer.