Ho modificato un pò il loader, adesso la cache verrà gestita grazie alla data di ultima modifica del file css o js. Se non c'è, il file verrà considerato fresco di modifica.
Codice PHP:
<?php
ob_start ("ob_gzhandler");
// Gestione cache
// Ricaviamo il nome del file
$file = $_SERVER["SCRIPT_NAME"];
$break = explode('/', $file);
$bfile = $break[count($break) - 1];
// Se è presente la data di ultima modifica
if(filemtime($bfile)){
// Mandiamo un Expires più lontano possibile
header("Expires: ".gmdate("D, d M Y H:i:s",time() + 315360000)." GMT");
// Ricaviamo il last-modified
$last_mod = gmdate('D, d M Y H:i:s',filemtime($bfile)).' GMT';
// Mandiamo gli header last-modified e if-modified-since usando la data di ultima modifica del file
header('Last-Modified: '.$last_mod);
header('If-Modified-Since: '.$last_mod);
header('Cache-Control: must-revalidate');
} else {
// Altrimenti, utilizziamo la data attuale
header('Last-Modified: '.gmdate('D, d M Y H:i:s').' GMT');
header('If-Modified-Since: '.gmdate('D, d M Y H:i:s').' GMT');
}
if($_GET['type'] == 'js'){
header("Content-type: text/javascript; charset=utf-8");
include($_GET['n'].'.js');
exit();
}elseif($_GET['type'] == 'css'){
header("Content-type: text/css; charset=utf-8");
include($_GET['n'].'.css');
exit();
}else {
echo $_GET['type'].'? Che stai tentando di fare, di preciso? :°)';
exit();
}
?>
poi aggiungete questo nel .htaccess per disabilitare gli ETag dei file CSS e JS (altrimenti è tutto inutile):
Codice PHP:
<FilesMatch "\.(css|js)$">
FileETag none
</FilesMatch>
nella prossima versione implementerò il caching server-side dei file compressi tramite jsmin e cssmin.
Nel frattempo, se proprio necessitate del caching server-side, potete utilizzare http://farhadi.ir/works/smartoptimizer, che però è un macigno e non so se vale la pena.