gzcompress php
Decodificar página web comprimida en gzip recuperada mediante cURL en PHP (3)
Estoy recuperando una página web con gzip a través de curl, pero cuando obtengo el contenido recuperado en el navegador, obtengo los datos en gz sin procesar. ¿Cómo puedo decodificar los datos en PHP?
Un método que encontré fue escribir el contenido en un archivo tmp y luego ...
$f = gzopen($filename,"r");
$content = gzread($filename,250000);
gzclose($f);
.... pero hombre, tiene que haber una mejor manera.
Editar: no es un archivo, sino una página html con gzip devuelta por un servidor web.
Hay varias soluciones propuestas en los comentarios en la página PHP para gzdecode .
Uso curl y:
curl_setopt($ch,CURLOPT_ENCODING , "gzip");
Versátil función GUNZIP:
function gunzip($zipped) { $offset = 0; if (substr($zipped,0,2) == "/x1f/x8b") $offset = 2; if (substr($zipped,$offset,1) == "/x08") { # file_put_contents("tmp.gz", substr($zipped, $offset - 2)); return gzinflate(substr($zipped, $offset + 8)); } return "Unknown Format"; }
Ejemplo de función integradora con CURL:
$headers_enabled = 1; curl_setopt($c, CURLOPT_HEADER, $headers_enabled) $ret = curl_exec($c); if ($headers_enabled) { # file_put_contents("preungzip.html", $ret); $sections = explode("/x0d/x0a/x0d/x0a", $ret, 2); while (!strncmp($sections[1], ''HTTP/'', 5)) { $sections = explode("/x0d/x0a/x0d/x0a", $sections[1], 2); } $headers = $sections[0]; $data = $sections[1]; if (preg_match(''/^Content-Encoding: gzip/mi'', $headers)) { printf("gzip header found/n"); return gunzip($data); } } return $ret;