Development

sfSuperCachePluginFor10

You must first sign up to be able to contribute.

sfSuperCache plugin (for symfony 1.0)

The sfSuperCachePlugin writes your page cache somewhere under your root directory to allow your web server to serve them as fast as possible.

It supports caching by domain name.

Please read the limitations at the end.

Installation

  • Install the plugin

    symfony plugin-install http://plugins.symfony-project.com/sfSuperCachePlugin
  • Choose a directory to store the cache under your web root
      mkdir web/cache
      chown apache.apache web/cache
  • Add sfSuperCacheFilter to your filters

    supercache:
      class: sfSuperCacheFilter
      param:
        cache_dir: cache
  • If your content doesn't change based on the hostname, you can switch the cache_host parameter to false:
    supercache:
      class: sfSuperCacheFilter
      param:
        cache_dir: cache
        with_host: false
  • If you don't want to deal with super cache lifetime you can switch the check_lifetime parameter to false:
    supercache:
      class: sfSuperCacheFilter
      param:
        cache_dir:      cache
        check_lifetime: false
  • Replace the 2 following lines in .htaccess
    RewriteRule ^$ index.html [QSA]
    RewriteRule ^([^.]+)$ $1.html [QSA]

by

    RewriteCond %{REQUEST_METHOD} GET
    RewriteCond %{DOCUMENT_ROOT}/cache/%{HTTP_HOST}/%{REQUEST_URI}index.html.php -f
    RewriteRule ^(.*) cache/%{HTTP_HOST}/$1index.html.php [L]

    RewriteCond %{REQUEST_METHOD} GET
    RewriteCond %{DOCUMENT_ROOT}/cache/%{HTTP_HOST}/%{REQUEST_URI}.html.php -f
    RewriteRule ^(.*) cache/%{HTTP_HOST}/$1.html.php [L]

    RewriteCond %{REQUEST_METHOD} GET
    RewriteCond %{DOCUMENT_ROOT}/cache/%{HTTP_HOST}/%{REQUEST_URI}.php -f
    RewriteRule ^(.*) cache/%{HTTP_HOST}/$1.php [L]

Don't forget to change the "cache" dir name with the one you chose in filters.yml.

If you set with_host to false, also remove %{HTTP_HOST}/ from the rules:

    RewriteCond %{REQUEST_METHOD} GET
    RewriteCond %{DOCUMENT_ROOT}/cache/%{REQUEST_URI}index.html.php -f
    RewriteRule ^(.*) cache/$1index.html.php [L]

    RewriteCond %{REQUEST_METHOD} GET
    RewriteCond %{DOCUMENT_ROOT}/cache/%{REQUEST_URI}.html.php -f
    RewriteRule ^(.*) cache/$1.html.php [L]

    RewriteCond %{REQUEST_METHOD} GET
    RewriteCond %{DOCUMENT_ROOT}/cache/%{REQUEST_URI}.php -f
    RewriteRule ^(.*) cache/$1.php [L]

If you set check_lifetime to false, also remove the trailing .php from the rules:

    RewriteCond %{REQUEST_METHOD} GET
    RewriteCond %{DOCUMENT_ROOT}/cache/%{REQUEST_URI}index.html -f
    RewriteRule ^(.*) cache/$1index.html [L]

    RewriteCond %{REQUEST_METHOD} GET
    RewriteCond %{DOCUMENT_ROOT}/cache/%{REQUEST_URI}.html -f
    RewriteRule ^(.*) cache/$1.html [L]

    RewriteCond %{REQUEST_METHOD} GET
    RewriteCond %{DOCUMENT_ROOT}/cache/%{REQUEST_URI} -f
    RewriteRule ^(.*) cache/$1 [L]
  • Clear you cache
    symfony cc
  • You're done.

Known limitations

  • If you disable the check_lifetime setting, routes of cached pages must end with the right extension (.html, .xml, .css, etc.). That's because Apache will serve these pages directly, so it must be able to guess the content type from the extension.
  • Calling the symfony cc task won't clear the "super" cache. It is important to clear both caches at the same time.
  • No vary support

Changelog

2009-01-14 | Trunk

  • francois: Added ability to preserve some HTTP headers when check_lifetime is set to true. That way, client-side cached actions live well with the plugin.
  • francois: Added ability to serve pages with a specific content-type when check_lifetime is set to true. That way, routes don't need to end with the right extension.
  • francois: Added an option to ignore cache lifetime and deal with pure html pages (no PHP)
  • francois: Added a cache control header to avoid proxy caching on redirections

2008-03-07 | 1.0.5

  • francois: Added support for cache lifetime (based on cache.yml settings) BC break: the signature of cache files has changed. They now end with .php

2007-10-10 | 1.0.4