Я прочитал несколько уроков о том, как сжать CSS-файл, в котором вы создаете публичный php-файл, чтобы включить css-файлы со сжатием. Проблема в том, что я не могу заставить его кэшировать мои CSS-файлы. Я использую Firebug для справки, и я на самом деле пытался использовать тот же код для сжатия некоторого JavaScript, и он отлично кеширует.
Вот код:
if(extension_loaded('zlib')){
ob_start('ob_gzhandler');
}
$offset = 60 * 60 * 24 * 31;
header('Content-type: text/css');
header ('Cache-Control: max-age=' . $offset . ', must-revalidate');
header ('Expires: ' . gmdate ("D, d M Y H:i:s", time() + $offset) . ' GMT');
ob_start("compress");
function compress($buffer) {
// Remove Comments, White Space, End ;'s
$buffer = preg_replace('#/\*.*?\*/#s', '', $buffer);
$buffer = preg_replace('/\s*([{}|:;,])\s+/', '$1', $buffer);
$buffer = preg_replace('/\s\s+(.*)/', '$1', $buffer);
$buffer = str_replace(';}', '}', $buffer);
$buffer = str_replace(' {', '{', $buffer);
return $buffer;
}
include('global.css');
if(extension_loaded('zlib')){
ob_end_flush();
}
Тогда я просто называю свой php-файл документом css на других страницах.
Как вы можете видеть, я пытался добавить максимальный возраст к миксу, который также оказался неудачным.
Вот заголовки ответа
Date
Tue, 21 Jul 2009 19:59:19 GMT
Server
Apache/1.3.41 (Darwin) PHP/4.4.9
X-Powered-By
PHP/4.4.9
Cache-Control
max-age=2592000, must-revalidate
Expires
Thu, 20 Aug 2009 19:59:19 GMT
Content-Encoding
gzip
Vary
Accept-Encoding
Keep-Alive
timeout=15, max=93
Connection
Keep-Alive
Transfer-Encoding
chunked
Content-Type
text/css
Есть ли что-то, что я пропускаю, или лучший способ сделать это?
Спасибо
EDIT:
Сценарий, который определяет, был ли файл изменен или отправляет 304, если это не так, в сочетании с правильными заголовками, решил эту проблему.
Артур