diff --git a/ecrire/inc_sites.php3 b/ecrire/inc_sites.php3 index 165beee4540a620c89fcff62cb1dc7db9ec1ba85..74bd954d14996055282ad59dfdecf00902674aa8 100644 --- a/ecrire/inc_sites.php3 +++ b/ecrire/inc_sites.php3 @@ -116,6 +116,10 @@ function init_http($get, $url) { if ($referer = lire_meta("adresse_site")) fputs($f, "Referer: $referer/\r\n"); + // On sait lire du gzip + if ($GLOBALS['flag_gz']) + fputs($f, "Accept-Encoding: gzip\r\n"); + } // fallback : fopen else if (!$GLOBALS['tester_proxy']) { @@ -172,6 +176,8 @@ function recuperer_page($url, $munge_charset=false, $get_headers=false, $taille_ $location = suivre_lien($url, $r[1]); spip_log("Location: $location"); } + if (preg_match(",^Content-Encoding: .*gzip,i", $s)) + $gz = true; } if ($status >= 300 AND $status < 400 AND $location) $url = $location; @@ -185,15 +191,19 @@ function recuperer_page($url, $munge_charset=false, $get_headers=false, $taille_ } // Contenu de la page + $result = ''; if (!$f) { spip_log("ECHEC chargement $url"); - $result = ''; } else { while (!feof($f) AND strlen($result)<$taille_max) $result .= fread($f, 16384); fclose($f); } + // Decompresser le flux + if ($gz) + $result = gzinflate(substr($result,10)); + // Faut-il l'importer dans notre charset local ? if ($munge_charset) { include_ecrire('inc_charsets.php3'); diff --git a/ecrire/inc_version.php3 b/ecrire/inc_version.php3 index 4d8095ae76f24469a3ebdce55bc1762d20c2462f..b4dde2fe5bbf3f696b446487d556e5249c03f442 100644 --- a/ecrire/inc_version.php3 +++ b/ecrire/inc_version.php3 @@ -652,7 +652,6 @@ function test_obgz () { && $GLOBALS['flag_ob'] && (phpversion()<>'4.0.4') && function_exists("ob_gzhandler") - && $GLOBALS['flag_obgz'] // special bug de proxy && !eregi("NetCache|Hasd_proxy", $GLOBALS['HTTP_VIA']) // special bug Netscape Win 4.0x @@ -664,11 +663,13 @@ function test_obgz () { && !@ini_get("zlib.output_compression") && !@ini_get("output_handler"); } + // si un buffer est deja ouvert, stop if ($flag_ob AND !headers_sent()) { @header("Vary: Cookie, Accept-Encoding"); - if (test_obgz()) + if (test_obgz()) { ob_start('ob_gzhandler'); + } }