<?php
/**
- * Generic cached assset server...
+ * Generic cached assset server... -- No security om this.. should only return compressed CSS/JS
+ *
+ * Does a few tricks with headers to improve caching...
*
*
* Also includes code to generate assets...
require_once 'Pman.php';
class Pman_Core_Asset extends Pman {
-
-
+
var $types = array(
'css' => 'text/css',
'js' => 'text/javascript',
);
+ function getAuth()
+ {
+ return true;
+ }
+
- function get($s='')
+ function get($s='', $opts = Array())
{
-
+
+ $this->sessionState(0);
+
$bits = explode('/', $s);
if (empty($bits[0]) || empty($bits[1]) || !isset($this->types[$bits[0]])) {
exit;
}
+
+ $supportsGzip = !empty($_SERVER['HTTP_ACCEPT_ENCODING']) && strpos( $_SERVER['HTTP_ACCEPT_ENCODING'], 'gzip' ) !== false;
+
+
$last_modified_time = filemtime($fn);
header("Pragma: public");
- header('Content-Length: '. filesize($fn));
+
header('Cache-Control: max-age=2592000, public');
header('Expires: '.gmdate('D, d M Y H:i:s \G\M\T', time() + 2592000));
header('Last-Modified: '.gmdate('D, d M Y H:i:s \G\M\T', $last_modified_time));
header('Etag: '. md5($fn));
- $fh = fopen($fn,'r');
- fpassthru($fh);
- fclose($fh);
+ if ( $supportsGzip ) {
+ $content = gzencode( file_get_contents($fn) , 9);
+
+ header('Content-Encoding: gzip');
+ header('Vary: Accept-Encoding');
+ header('Content-Length: '. strlen($content));
+
+ echo $content;
+
+ } else {
+
+
+ $fh = fopen($fn,'r');
+ fpassthru($fh);
+ fclose($fh);
+ $content = $data;
+ }
+
+
+
exit;
}