diff options
author | Michael Hamann <michael@content-space.de> | 2012-08-24 14:16:30 +0200 |
---|---|---|
committer | Michael Hamann <michael@content-space.de> | 2012-08-24 16:50:07 +0200 |
commit | 65f6e7d681429606c80d257b157e2af13f11e67a (patch) | |
tree | c2c7e56a083785d349e6dba62718ec0e8282cd2b | |
parent | 64273335d1bae12b2fe7d9664e1665d6e69d47af (diff) | |
download | rpg-65f6e7d681429606c80d257b157e2af13f11e67a.tar.gz rpg-65f6e7d681429606c80d257b157e2af13f11e67a.tar.bz2 |
Disable compression when a compressed sitemap might be delivered FS#2576
Compressing a gzip file again for transport is standards compliant, but
some clients assume that the file is only compressed once then and don't
remove the outer compression layer. This could disable compression in
too many cases theses cases should be rare and shouldn't cause any
problems.
-rw-r--r-- | inc/Sitemapper.php | 12 | ||||
-rw-r--r-- | inc/actions.php | 2 | ||||
-rw-r--r-- | inc/init.php | 6 |
3 files changed, 17 insertions, 3 deletions
diff --git a/inc/Sitemapper.php b/inc/Sitemapper.php index bbea73b52..1315ed448 100644 --- a/inc/Sitemapper.php +++ b/inc/Sitemapper.php @@ -100,7 +100,7 @@ class Sitemapper { global $conf; $sitemap = $conf['cachedir'].'/sitemap.xml'; - if($conf['compression'] === 'bz2' || $conf['compression'] === 'gz'){ + if (self::sitemapIsCompressed()) { $sitemap .= '.gz'; } @@ -108,6 +108,16 @@ class Sitemapper { } /** + * Helper function for checking if the sitemap is compressed + * + * @return bool If the sitemap file is compressed + */ + public static function sitemapIsCompressed() { + global $conf; + return $conf['compression'] === 'bz2' || $conf['compression'] === 'gz'; + } + + /** * Pings search engines with the sitemap url. Plugins can add or remove * urls to ping using the SITEMAP_PING event. * diff --git a/inc/actions.php b/inc/actions.php index 62b0e1800..88576e1dc 100644 --- a/inc/actions.php +++ b/inc/actions.php @@ -637,7 +637,7 @@ function act_sitemap($act) { } $sitemap = Sitemapper::getFilePath(); - if(strrchr($sitemap, '.') === '.gz'){ + if (Sitemapper::sitemapIsCompressed()) { $mime = 'application/x-gzip'; }else{ $mime = 'application/xml; charset=utf-8'; diff --git a/inc/init.php b/inc/init.php index 00ab2afe9..4105225ea 100644 --- a/inc/init.php +++ b/inc/init.php @@ -129,9 +129,13 @@ if(!defined('DOKU_TPLINC')) define('DOKU_TPLINC', // enable gzip compression if supported $conf['gzip_output'] &= (strpos($_SERVER['HTTP_ACCEPT_ENCODING'],'gzip') !== false); +global $ACT; if ($conf['gzip_output'] && !defined('DOKU_DISABLE_GZIP_OUTPUT') && - function_exists('ob_gzhandler')) { + function_exists('ob_gzhandler') && + // Disable compression when a compressed sitemap might be delivered + // See https://bugs.dokuwiki.org/index.php?do=details&task_id=2576 + !($ACT == 'sitemap' && Sitemapper::sitemapIsCompressed())) { ob_start('ob_gzhandler'); } |