Как кэшировать статический контент (CSS, изображения, файлы JS) в CakePHP2? - PullRequest
5 голосов
/ 13 июля 2011

Мне нужно установить некоторые заголовки HTTP «Expires», «Cache-Control», «Last-Modified», для ресурсов в виде файлов CSS, файлов изображений, файлов js и т. Д. (Содержимое Webroot).

Я читал, что есть некоторые функции, через

   Configure::write('Asset.timestamp', true); // In core.php

и метод assetTimestamp класса Helper.

Теперь вопрос: как это используется?

Я прочитал код HtmlHelper и в методе css, строка 361, это:

$url = $this->assetTimestamp($this->webroot($path));

1 Ответ

11 голосов
/ 14 июля 2011

Решено.

Прежде всего вы должны рассмотреть возможность сделать это через Apache.Вы можете взглянуть на это руководство: http://httpd.apache.org/docs/2.2/caching.html

Дело в том, что CakePHP имеет метод для этого.И это довольно хорошо.

Я объясню это для файлов CSS.Конечно, можно использовать и для JS-контента.

1) В вашем файле core.php (в app / config /) раскомментируйте эту строку:

Configure::write('Asset.filter.css', 'css.php');

Эта строка говорит CakePHPнаправлять все запросы к файлам CSS через этот скрипт "css.php".Как следует из названия, это фильтр.Там мы можем делать все, что захотим.

2) Создайте этот файл "css.php".Вы должны создать его в app / webroot /

Сделав это, вы можете взять файл, который запрашивает браузер, и применить некоторые HTTP-заголовки кэша.

Что-то вроде:

$filepath = CSS . $regs[1]; //There are some variables that are can be used in this script, take a look to de docs.

$output = file_get_contents($filepath);
header("Date: " . date("D, j M Y G:i:s ", $templateModified) . 'GMT');
header("Content-Type: text/css");
header("Expires: " . gmdate("D, d M Y H:i:s", time() + DAY) . " GMT"); //WEEK or MONTH are valid as well
header("Cache-Control: max-age=86400, must-revalidate"); // HTTP/1.1
header("Pragma: cache");        // HTTP/1.0
print $output;

Вот и все!Там ваш контент будет обслуживаться с указанными заголовками, и браузер будет знать, что может их кешировать.

Взгляните на:

http://www.bunchacode.com/programming/get-cakephp-build-in-css-compression-to-work/

Есть хорошая версияфайла css.php, который также его обрабатывает.

...