From: Petr Skoda Date: Tue, 5 Jan 2010 20:18:15 +0000 (+0000) Subject: MDL-21241 theme CSS and JS gzip compression + some more fixes X-Git-Url: http://git.mjollnir.org/gw?a=commitdiff_plain;h=7c986f04e36ec553d9fce7a2cbce31db3cf0ec46;p=moodle.git MDL-21241 theme CSS and JS gzip compression + some more fixes --- diff --git a/lib/configonlylib.php b/lib/configonlylib.php index 11c70e917e..b02c4d8252 100644 --- a/lib/configonlylib.php +++ b/lib/configonlylib.php @@ -71,4 +71,40 @@ function min_clean_param($value, $type) { } return $value; +} + +/** + * This method tries to enable output compression if possible. + * This function must be called before any output or headers. + * + * (IE6 is not supported at all.) + * + * @return boolean, true if compression enabled + */ +function min_enable_zlib_compression() { + + if (headers_sent()) { + return false; + } + + // zlib.output_compression is preferred over ob_gzhandler() + if (!empty($_SERVER['HTTP_USER_AGENT'])) { + $agent = $_SERVER['HTTP_USER_AGENT']; + // try to detect IE6 and prevent gzip because it is extremely buggy browser + $parts = explode(';', $agent); + if (isset($parts[1])) { + $parts = explode(' ', trim($parts[1])); + if (count($parts) > 1) { + if ($parts[0] === 'MSIE' and (float)$string[1] < 7) { + @ini_set('zlib.output_compression', '0'); + return false; + } + } + } + } + + @ini_set('output_handler', ''); + @ini_set('zlib.output_compression', 'on'); + + return true; } \ No newline at end of file diff --git a/theme/image.php b/theme/image.php index a5823e5c31..1324ca7210 100644 --- a/theme/image.php +++ b/theme/image.php @@ -144,7 +144,8 @@ function send_cached_image($imagepath, $rev) { header('Content-Type: '.$mimetype); header('Content-Length: '.filesize($imagepath)); - while (@ob_end_flush()); //flush the buffers - save memory and disable sid rewrite + // no need to gzip already compressed images ;-) + readfile($imagepath); die; } @@ -170,7 +171,6 @@ function send_uncached_image($imagepath) { header('Content-Type: '.$mimetype); header('Content-Length: '.filesize($imagepath)); - while (@ob_end_flush()); //flush the buffers - save memory and disable sid rewrite readfile($imagepath); die; } diff --git a/theme/javascripts.php b/theme/javascripts.php index f347b11c02..33b7ff1117 100644 --- a/theme/javascripts.php +++ b/theme/javascripts.php @@ -89,9 +89,10 @@ function send_cached_js($jspath) { header('Pragma: '); header('Accept-Ranges: none'); header('Content-Type: application/x-javascript'); - header('Content-Length: '.filesize($jspath)); + if (!min_enable_zlib_compression()) { + header('Content-Length: '.filesize($jspath)); + } - while (@ob_end_flush()); //flush the buffers - save memory and disable sid rewrite readfile($jspath); die; } @@ -105,7 +106,6 @@ function send_uncached_js($js) { header('Content-Type: application/x-javascript'); header('Content-Length: '.strlen($js)); - while (@ob_end_flush()); //flush the buffers - save memory and disable sid rewrite echo $js; die; } diff --git a/theme/styles.php b/theme/styles.php index 969700e9b3..39a7b05233 100644 --- a/theme/styles.php +++ b/theme/styles.php @@ -129,9 +129,10 @@ EOF; header('Pragma: '); header('Accept-Ranges: none'); header('Content-Type: text/css'); - header('Content-Length: '.strlen($css)); + if (!min_enable_zlib_compression()) { + header('Content-Length: '.strlen($css)); + } - while (@ob_end_flush()); //flush the buffers - save memory and disable sid rewrite echo $css; die; } @@ -145,9 +146,10 @@ function send_cached_css($csspath, $rev) { header('Pragma: '); header('Accept-Ranges: none'); header('Content-Type: text/css'); - header('Content-Length: '.filesize($csspath)); + if (!min_enable_zlib_compression()) { + header('Content-Length: '.filesize($csspath)); + } - while (@ob_end_flush()); //flush the buffers - save memory and disable sid rewrite readfile($csspath); die; } diff --git a/theme/styles_debug.php b/theme/styles_debug.php index 1fe88343e6..8e26a8fc7d 100644 --- a/theme/styles_debug.php +++ b/theme/styles_debug.php @@ -44,6 +44,8 @@ if (file_exists("$CFG->dirroot/theme/$themename/config.php")) { css_not_found(); } +// no gzip compression when debugging + $candidatesheet = "$CFG->dataroot/cache/theme/$themename/designer.ser"; if (!file_exists($candidatesheet)) { @@ -85,9 +87,8 @@ function send_uncached_css($css, $lifetime = THEME_DESIGNER_CACHE_LIFETIME) { header('Pragma: '); header('Accept-Ranges: none'); header('Content-Type: text/css'); - header('Content-Length: '.strlen($css)); + //header('Content-Length: '.strlen($css)); - while (@ob_end_flush()); //flush the buffers - save memory and disable sid rewrite echo($css); die; } diff --git a/theme/yui_combo.php b/theme/yui_combo.php index 7fadba4f9f..1502c393be 100644 --- a/theme/yui_combo.php +++ b/theme/yui_combo.php @@ -92,9 +92,10 @@ function combo_send_cached($content, $mimetype) { header('Cache-Control: max-age=315360000'); header('Accept-Ranges: none'); header('Content-Type: '.$mimetype); - header('Content-Length: '.strlen($content)); + if (!min_enable_zlib_compression()) { + header('Content-Length: '.strlen($content)); + } - while (@ob_end_flush()); //flush the buffers - save memory and disable sid rewrite echo $content; die; } diff --git a/theme/yui_image.php b/theme/yui_image.php index 30fa5d64bd..7a625b862d 100644 --- a/theme/yui_image.php +++ b/theme/yui_image.php @@ -75,7 +75,8 @@ function yui_image_cached($imagepath) { header('Content-Type: '.$mimetype); header('Content-Length: '.filesize($imagepath)); - while (@ob_end_flush()); //flush the buffers - save memory and disable sid rewrite + // no need to gzip already compressed images ;-) + readfile($imagepath); die; }