Decodifica la pagina Web gzip recuperata tramite cURL in PHP
Domanda
Sto recuperando una pagina web con gzip tramite curl, ma quando eseguo l'output del contenuto recuperato sul browser ottengo solo i dati gzip grezzi. Come posso decodificare i dati in PHP?
Un metodo che ho trovato è stato quello di scrivere il contenuto in un file tmp e quindi ...
$f = gzopen($filename,"r");
$content = gzread($filename,250000);
gzclose($f);
.... ma amico, deve esserci un modo migliore.
Modifica: questo non è un file, ma una pagina html con gzip restituita da un server web.
Soluzione
Uso curl e:
curl_setopt($ch,CURLOPT_ENCODING , "gzip");
Altri suggerimenti
Esistono diverse soluzioni proposte nei commenti sulla pagina PHP per gzdecode .
Funzione GUNZIP versatile:
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"; }
Esempio di integrazione della funzione 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;
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow