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.
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.