_emit("javascript", $key); } /** * Return the combined CSS bundle associated with the given key. */ public function css($key) { return $this->_emit("css", $key); } /** * Print out a cached entry. * @param string the combined entry type (either "javascript" or "css") * @param string the key (typically an md5 sum) */ private function _emit($type, $key) { $input = Input::instance(); // We don't need to save the session for this request Session::instance()->abort_save(); // Our data is immutable, so if they already have a copy then it needs no updating. if ($input->server("HTTP_IF_MODIFIED_SINCE")) { header('HTTP/1.0 304 Not Modified'); header("Expires: Tue, 19 Jan 2038 00:00:00 GMT"); header("Cache-Control: public,max-age=2678400"); header('Pragma: public'); Kohana::close_buffers(false); return ""; } if (empty($key)) { throw new Kohana_404_Exception(); } $cache = Cache::instance(); $use_gzip = function_exists("gzencode") && stripos($input->server("HTTP_ACCEPT_ENCODING"), "gzip") !== false && (int) ini_get("zlib.output_compression") === 0; if ($use_gzip && $content = $cache->get("{$key}_gz")) { header("Content-Encoding: gzip"); header("Vary: Accept-Encoding"); } else { // Fall back to non-gzipped if we have to $content = $cache->get($key); } if (empty($content)) { throw new Kohana_404_Exception(); } // $type is either 'javascript' or 'css' if ($type == "javascript") { header("Content-Type: application/javascript; charset=UTF-8"); } else { header("Content-Type: text/css; charset=UTF-8"); } header("Expires: Tue, 19 Jan 2038 00:00:00 GMT"); header("Cache-Control: public,max-age=2678400"); header("Pragma: public"); header("Last-Modified: " . gmdate("D, d M Y H:i:s T", time())); header("Content-Length: " . strlen($content)); Kohana::close_buffers(false); print $content; } }