Décoder la page Web compressée récupérée via PHP en cURL
Question
Je récupère une page Web compressée via curl, mais lorsque je transmets le contenu récupéré au navigateur, je ne récupère que les données brutes compressées. Comment décoder les données en PHP?
Une méthode que j'ai trouvée consistait à écrire le contenu dans un fichier tmp, puis ...
$f = gzopen($filename,"r");
$content = gzread($filename,250000);
gzclose($f);
.... mais l'homme, il doit y avoir une meilleure façon.
Éditer: Ce n'est pas un fichier, mais une page html gzippée renvoyée par un serveur Web.
La solution
J'utilise curl et:
curl_setopt($ch,CURLOPT_ENCODING , "gzip");
Autres conseils
Plusieurs solutions sont proposées dans les commentaires de la page PHP pour gzdecode .
Fonction GUNZIP polyvalente:
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"; }
Exemple d'intégration d'une fonction avec 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;
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow