1 | <?php |
||
19 | class cache |
||
20 | { |
||
21 | /** |
||
22 | * This method creates a new cache store ( \arc\cache\Store ) |
||
23 | * It will store the cache on disk in a folder defined by ARC_CACHE_DIR, or if not |
||
24 | * defined in the system temp dir under arc/cache/. |
||
25 | * @param string $prefix Optional. A prefix name or path for subsequent cache images |
||
26 | * @param mixed $timeout Optional. Number of seconds (int) or string parseable by strtotime. Defaults to 7200. |
||
27 | * @return cache\Store |
||
28 | * @throws ExceptionConfigError |
||
29 | */ |
||
30 | 8 | public static function create($prefix = null, $timeout = 7200) |
|
31 | { |
||
32 | 8 | if (!defined('ARC_CACHE_DIR')) { |
|
33 | 2 | define( 'ARC_CACHE_DIR', sys_get_temp_dir().'/arc/cache' ); |
|
34 | } |
||
35 | 8 | if (!file_exists( ARC_CACHE_DIR )) { |
|
36 | 2 | @mkdir( ARC_CACHE_DIR, 0770, true ); |
|
37 | } |
||
38 | 8 | if (!file_exists( ARC_CACHE_DIR )) { |
|
39 | throw new \arc\ConfigError('Cache Directory does not exist ( '.ARC_CACHE_DIR.' )', \arc\exceptions::CONFIGURATION_ERROR); |
||
40 | } |
||
41 | 8 | if (!is_dir( ARC_CACHE_DIR )) { |
|
42 | throw new \arc\ConfigError('Cache Directory is not a directory ( '.ARC_CACHE_DIR.' )', \arc\exceptions::CONFIGURATION_ERROR); |
||
43 | } |
||
44 | 8 | if (!is_writable( ARC_CACHE_DIR )) { |
|
45 | throw new \arc\ConfigError('Cache Directory is not writable ( '.ARC_CACHE_DIR.' )', \arc\exceptions::CONFIGURATION_ERROR); |
||
46 | } |
||
47 | 8 | if (!$prefix) { // make sure you have a default prefix, so you won't clear other prefixes unintended |
|
48 | 2 | $prefix = 'default'; |
|
49 | } |
||
50 | 8 | $context = \arc\context::$context; |
|
51 | 8 | $fileStore = new cache\FileStore( ARC_CACHE_DIR . '/' . $prefix, $context->arcPath ); |
|
52 | |||
53 | 8 | return new cache\Store( $fileStore, $timeout ); |
|
54 | } |
||
55 | |||
56 | /** |
||
57 | * This method creates a new cache store, if one is not available in \arc\context yet, stores it in \arc\context |
||
58 | * and returns it. |
||
59 | * @return cache\Store |
||
60 | */ |
||
61 | 4 | public static function getCacheStore() |
|
62 | { |
||
63 | 4 | $context = \arc\context::$context; |
|
64 | 4 | if (!$context->arcCacheStore) { |
|
65 | 2 | $context->arcCacheStore = self::create(); |
|
66 | } |
||
67 | |||
68 | 4 | return $context->arcCacheStore; |
|
69 | } |
||
70 | |||
71 | /** |
||
72 | * This reroutes any static calls to \arc\cache to the cache store instance in \arc\context |
||
73 | * @param $name |
||
74 | * @param $args |
||
75 | * @return mixed |
||
76 | * @throws ExceptionMethodNotFound |
||
77 | */ |
||
78 | 4 | public static function __callStatic($name, $args) |
|
87 | |||
88 | /** |
||
89 | * Creates a new caching proxy object for any given object. |
||
90 | * @param $object The object to cache |
||
91 | * @param mixed $cacheControl Either an integer with the number of seconds to cache stuff, or a closure that returns an int. |
||
92 | * The closure is called with one argument, an array with the following information: |
||
93 | * - target The cached object a method was called on. |
||
94 | * - method The method called |
||
95 | * - arguments The arguments to the method |
||
96 | * - output Any output generated by the method |
||
97 | * - result The result of the method |
||
98 | * @return cache\Proxy |
||
99 | */ |
||
100 | 4 | public static function proxy($object, $cacheControl = 7200) |
|
104 | } |
||
105 |