_emit("javascript", $key); } /** * Return the combined CSS bundle associated with the given key. */ public function css($key) { $key = substr($key, 0, strlen($key) - 4); // strip off the trailing .css 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(); // 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'); return; } if (empty($key)) { Kohana::show_404(); } // We don't need to save the session for this request Session::abort_save(); $cache = Cache::instance(); $use_gzip = function_exists("gzencode") && (strpos($input->server("HTTP_ACCEPT_ENCODING"), "gzip") !== false); if ($use_gzip && $content = $cache->get("{$key}_gz")) { header("Content-Encoding: gzip"); header("Cache-Control: public"); } else { // Fall back to non-gzipped if we have to $content = $cache->get($key); } if (empty($content)) { Kohana::show_404(); } // $type is either 'javascript' or 'css' header("Content-Type: text/$type; charset=UTF-8"); header("Expires: Tue, 19 Jan 2038 00:00:00 GMT"); header("Last-Modified: " . gmdate("D, d M Y H:i:s T", time())); Kohana::close_buffers(false); print $content; } }