From 59669cb6c9e720095d60680ba0b31cdc1390e660 Mon Sep 17 00:00:00 2001 From: bohwaz Date: Fri, 23 Dec 2022 20:42:01 +0100 Subject: [PATCH] Limit gzip compression to smaller files, also exclude other kinds of files --- index.php | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/index.php b/index.php index 52864ee..daecd05 100644 --- a/index.php +++ b/index.php @@ -34,6 +34,8 @@ namespace KD2\WebDAV const SHARED_LOCK = 'shared'; const EXCLUSIVE_LOCK = 'exclusive'; + protected bool $enable_gzip = true; + protected string $base_uri; public string $original_uri; @@ -344,17 +346,20 @@ namespace KD2\WebDAV $this->log('HTTP Range requested: %s-%s', $start, $end); } - elseif (isset($_SERVER['HTTP_ACCEPT_ENCODING']) + elseif ($this->enable_gzip + && isset($_SERVER['HTTP_ACCEPT_ENCODING']) && false !== strpos($_SERVER['HTTP_ACCEPT_ENCODING'], 'gzip') + && isset($props['DAV::getcontentlength']) + // Don't compress if size is larger than 8 MiB + && $props['DAV::getcontentlength'] < 8*1024*1024 // Don't compress already compressed content - && !preg_match('/\.(?:mp4|m4a|zip|docx|xlsx|ods|odt|odp|7z|gz|bz2|rar|webm|ogg|mp3|ogm|flac|ogv|mkv|avi)$/i', $uri)) { + && !preg_match('/\.(?:cbz|cbr|cb7|mp4|m4a|zip|docx|xlsx|pptx|ods|odt|odp|7z|gz|bz2|lzma|lz|xz|apk|dmg|jar|rar|webm|ogg|mp3|ogm|flac|ogv|mkv|avi)$/i', $uri)) { $gzip = true; header('Content-Encoding: gzip', true); } // Try to avoid common issues with output buffering and stuff - if (function_exists('apache_setenv')) - { + if (function_exists('apache_setenv')) { @apache_setenv('no-gzip', 1); } @@ -436,7 +441,7 @@ namespace KD2\WebDAV if ($gzip) { $this->log('Using gzip output compression'); - $gzip = deflate_init(ZLIB_ENCODING_GZIP, ['level' => 9]); + $gzip = deflate_init(ZLIB_ENCODING_GZIP); $fp = fopen('php://temp', 'wb'); @@ -1883,11 +1888,11 @@ RewriteRule ^.*$ /index.php [END] $fp = fopen(__FILE__, 'r'); if ($relative_uri == '.webdav/webdav.js') { - fseek($fp, 50401, SEEK_SET); + fseek($fp, 50637, SEEK_SET); echo fread($fp, 27769); } else { - fseek($fp, 50401 + 27769, SEEK_SET); + fseek($fp, 50637 + 27769, SEEK_SET); echo fread($fp, 7004); }