Development

/branches/1.1/lib/plugins/sfCompat10Plugin/lib/cache/sfProcessCache.class.php

You must first sign up to be able to contribute.

root/branches/1.1/lib/plugins/sfCompat10Plugin/lib/cache/sfProcessCache.class.php

Revision 11774, 4.4 kB (checked in by FabianLange, 6 years ago)

[1.1] fixed #4491

Line 
1 <?php
2
3 /*
4  * This file is part of the symfony package.
5  * (c) 2004-2006 Fabien Potencier <fabien.potencier@symfony-project.com>
6  *
7  * For the full copyright and license information, please view the LICENSE
8  * file that was distributed with this source code.
9  */
10
11 /**
12  * sfProcessCache stores content in memory if you run a PHP accelerator.
13  *
14  * Current PHP accelerator supported: APC, XCache and Eaccelerator.
15  *
16  * WARNING: This class is deprecated and will be removed in symfony 1.2.
17  *
18  * @package    symfony
19  * @subpackage cache
20  * @author     Fabien Potencier <fabien.potencier@symfony-project.com>
21  * @version    SVN: $Id$
22  * @deprecated Deprecated since symfony 1.1
23  */
24 class sfProcessCache
25 {
26   /**
27    * Gets the cache engine name or false if no PHP accelerator is enabled.
28    *
29    * @return string The cache engine name
30    */
31   public static function cacher()
32   {
33     static $cacher = null;
34
35     if (null === $cacher)
36     {
37       if (!sfConfig::get('sf_use_process_cache'))
38       {
39         $cacher = false;
40       }
41       elseif (function_exists('apc_store'))
42       {
43         $cacher = 'apc';
44       }
45       elseif (function_exists('xcache_set'))
46       {
47         $cacher = 'xcache';
48       }
49       elseif (function_exists('eaccelerator_put'))
50       {
51         $cacher = 'eaccelerator';
52       }
53       else
54       {
55         $cacher = false;
56       }
57     }
58
59     return $cacher;
60   }
61
62   /**
63    * Gets the prefix to use for all key name.
64    *
65    * @return string The prefix string
66    */
67   public static function getPrefix()
68   {
69     static $prefix = null;
70
71     if (!$prefix)
72     {
73       $prefix = md5(sfConfig::get('sf_app_dir')).'_';
74     }
75
76     return $prefix;
77   }
78
79   /**
80    * Sets a value in the cache for the specified key.
81    *
82    * @param string The key name
83    * @param string The content to put in cache
84    * @param int The life time to keep the content in the cache in seconds
85    *
86    * @return boolean true if ok
87    */
88   public static function set($key, $value, $lifeTime = 0)
89   {
90     switch (self::cacher())
91     {
92       case 'apc':
93         return apc_store(self::getPrefix().$key, $value, $lifeTime);
94       case 'xcache':
95         return xcache_set(self::getPrefix().$key, $value, $lifeTime);
96       case 'eaccelerator':
97         return eaccelerator_put(self::getPrefix().$key, serialize($value), $lifeTime);
98     }
99
100     return false;
101   }
102
103   /**
104    * Gets a value in the cache for the specified key.
105    *
106    * @param string The key name
107    *
108    * @return mixed The content associated with the key or null if the key does not exist
109    */
110   public static function get($key)
111   {
112     switch (self::cacher())
113     {
114       case 'apc':
115         $value = apc_fetch(self::getPrefix().$key);
116         return false === $value ? null : $value;
117       case 'xcache':
118         return xcache_isset(self::getPrefix().$key) ? xcache_get(self::getPrefix().$key) : null;
119       case 'eaccelerator':
120         return unserialize(eaccelerator_get(self::getPrefix().$key));
121     }
122
123     return null;
124   }
125
126   /**
127    * Returns true if a given key exists in the cache, false otherwise.
128    *
129    * @param string The key name
130    *
131    * @return boolean true if the key exists, false otherwise
132    */
133   public static function has($key)
134   {
135     switch (self::cacher())
136     {
137       case 'apc':
138         return false === apc_fetch(self::getPrefix().$key) ? false : true;
139       case 'xcache':
140         return xcache_isset(self::getPrefix().$key);
141       case 'eaccelerator':
142         return null === eaccelerator_get(self::getPrefix().$key) ? false : true;
143     }
144
145     return false;
146   }
147
148   /**
149    * Clears the cache.
150    *
151    * @return boolean true if ok, false otherwise
152    */
153   public static function clear()
154   {
155     switch (self::cacher())
156     {
157       case 'apc':
158         return apc_clear_cache('user');
159       case 'xcache':
160         for ($i = 0, $max = xcache_count(XC_TYPE_VAR); $i < $max; $i++)
161         {
162           if (!xcache_clear_cache(XC_TYPE_VAR, $i))
163           {
164             return false;
165           }
166         }
167         return true;
168       case 'eaccelerator':
169         $infos = eaccelerator_list_keys();
170         if (is_array($infos))
171         {
172           foreach ($infos as $info)
173           {
174             // eaccelerator bug (http://eaccelerator.net/ticket/287)
175             $key = 0 === strpos($info['name'], ':') ? substr($info['name'], 1) : $info['name'];
176             if (!eaccelerator_rm($key))
177             {
178               return false;
179             }
180           }
181         }
182
183         return true;
184     }
185
186     return false;
187   }
188 }
189
Note: See TracBrowser for help on using the browser.