Декодировать сжатую веб-страницу, полученную с помощью CURL на PHP
Я извлекаю сжатую веб-страницу с помощью curl, но когда я выводю извлеченный контент в браузер, я просто получаю необработанные сжатые данные. Как я могу декодировать данные в PHP?
Один из методов, который я нашел, состоял в том, чтобы записать содержимое в файл tmp, а затем...
$f = gzopen($filename,"r");
$content = gzread($filename,250000);
gzclose($f);
.... но, чувак, должен быть способ получше.
Изменить: Это не файл, а сжатая html-страница, возвращенная веб-сервером.
48
3 answers
Я использую curl и:
curl_setopt($ch,CURLOPT_ENCODING , "gzip");
113
Author: jonasl, 2010-05-17 16:32:31
В комментариях к странице PHP для gzdecode предлагается несколько решений.
2
Author: Oddthinking, 2008-11-22 05:15:36
Универсальная функция 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"; }
Пример интегрирующей функции с 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;
2
Author: Maryam Jeddian, 2011-01-30 07:38:23