cache.php 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. <?php
  2. /**
  3. * Lithium: the most rad php framework
  4. *
  5. * @copyright Copyright 2010, Union of RAD (http://union-of-rad.org)
  6. * @license http://opensource.org/licenses/bsd-license.php The BSD License
  7. */
  8. /**
  9. * This file creates a default cache configuration using the most optimized adapter available, and
  10. * uses it to provide default caching for high-overhead operations.
  11. */
  12. use lithium\storage\Cache;
  13. use lithium\core\Libraries;
  14. use lithium\action\Dispatcher;
  15. use lithium\storage\cache\adapter\Apc;
  16. if (PHP_SAPI === 'cli') {
  17. return;
  18. }
  19. /**
  20. * If APC is not available and the cache directory is not writeable, bail out. This block should be
  21. * removed post-install, and the cache should be configured with the adapter you plan to use.
  22. */
  23. $cachePath = Libraries::get(true, 'resources') . '/tmp/cache';
  24. if (!($apcEnabled = Apc::enabled()) && !is_writable($cachePath)) {
  25. return;
  26. }
  27. /**
  28. * This configures the default cache, based on whether ot not APC user caching is enabled. If it is
  29. * not, file caching will be used. Most of this code is for getting you up and running only, and
  30. * should be replaced with a hard-coded configuration, based on the cache(s) you plan to use.
  31. */
  32. $default = array('adapter' => 'File', 'strategies' => array('Serializer'));
  33. if ($apcEnabled) {
  34. $default = array('adapter' => 'Apc');
  35. }
  36. Cache::config(compact('default'));
  37. /**
  38. * Caches paths for auto-loaded and service-located classes.
  39. */
  40. Dispatcher::applyFilter('run', function($self, $params, $chain) {
  41. $key = md5(LITHIUM_APP_PATH) . '.core.libraries';
  42. if ($cache = Cache::read('default', $key)) {
  43. $cache = (array) $cache + Libraries::cache();
  44. Libraries::cache($cache);
  45. }
  46. $result = $chain->next($self, $params, $chain);
  47. if ($cache != Libraries::cache()) {
  48. Cache::write('default', $key, Libraries::cache(), '+1 day');
  49. }
  50. return $result;
  51. });
  52. ?>