00001 <?php
00002
00011 abstract class SCacheManager {
00012 private static $CACHE_LOADED = false;
00013 private static $fCache = null;
00014
00022 public static function loadIncludeCache() {
00023 if(!self::$CACHE_LOADED && SConfig::getDefault('includeCache.enable')) {
00024 $sn = str_replace(array('/', '~'), array('_', ':'), $_SERVER['SCRIPT_FILENAME']);
00025 $icPath = SConfig::getDefault('includeCache.path') . '/' . SConfig::getDefault('common.server');
00026 if(!is_dir($icPath))
00027 mkdir($icPath, 0755, true);
00028 $sn = "$icPath/$sn.cache";
00029
00030 if(file_exists($sn)) {
00031 $list = file_get_contents("$sn");
00032 $list = array_unique(explode(" ", $list));
00033 foreach($list as $fl) {
00034 if($fl == "")
00035 continue;
00036 if(!include_once($fl)) {
00037 print "<b>ERROR</b>: Can't include $fl<br />Cache will be regenerated on next run\n";
00038 unlink("$sn");
00039
00040 exit;
00041 }
00042 }
00043 }
00044
00045 self::$fCache = fopen("$sn", "a");
00046 }
00047
00048 self::$CACHE_LOADED = true;
00049 }
00050
00059 public static function addToIncludeCache($fileName) {
00060 if(self::$fCache !== null) {
00061 fwrite(self::$fCache, " $fileName");
00062 }
00063 }
00064
00074 public static function clearIncludeCache($uri = null, $whichServer = false) {
00075 if($whichServer === false)
00076 $whichServer = SConfig::getDefault('common.server');
00077 else if($whichServer === true) {
00078 foreach(SConfig::getDefault('scache.servers') as $server)
00079 self::clearIncludeCache($uri, $server);
00080 return true;
00081 }
00082 else if(!in_array($whichServer, SConfig::getDefault('scache.servers')))
00083 return false;
00084 $icPath = SConfig::getDefault('includeCache.path') . '/' . $whichServer;
00085 if($uri) {
00086 if($uri === true)
00087 $sn = str_replace(array('/', '~'), array('_', ':'), $_SERVER['SCRIPT_FILENAME']);
00088 else
00089 $sn = str_replace(array('/', '~'), array('_', ':'), $uri);
00090 $sn = "$icPath/$sn.cache";
00091 if(file_exists($sn))
00092 unlink($sn);
00093 }
00094 else {
00095 $files = scandir($icPath);
00096 foreach($files as $file) {
00097 if($file != '.' && $file != '..' && is_file("$icPath/$file"))
00098 unlink("$icPath/$file");
00099 }
00100 }
00101 return true;
00102 }
00103
00112 public static function getIncludeCacheCount($whichServer = false) {
00113 if($whichServer === false)
00114 $whichServer = SConfig::getDefault('common.server');
00115 else if(!in_array($whichServer, SConfig::getDefault('scache.servers')))
00116 return false;
00117
00118 $icPath = SConfig::getDefault('includeCache.path') . '/' . $whichServer;
00119 return count(scandir($icPath)) - 2;
00120 }
00121
00130 public static function getIncludeCacheEntries($whichServer = false) {
00131 if($whichServer === false)
00132 $whichServer = SConfig::getDefault('common.server');
00133 else if(!in_array($whichServer, SConfig::getDefault('scache.servers')))
00134 return false;
00135
00136 $icPath = SConfig::getDefault('includeCache.path') . '/' . $whichServer;
00137 $entries = array();
00138 $raw = scandir($icPath);
00139 foreach($raw as $file) {
00140 if($file == '.' || $file == '..')
00141 continue;
00142 $entries[] = substr(str_replace(array('_', ':'), array('/', '~'), $file), 0, -6);
00143 }
00144 return $entries;
00145 }
00146
00155 public static function addToPageCache($page) {
00156 $pcPath = SConfig::getDefault('pageCache.path') . '/' . SConfig::getDefault('common.server');
00157 if(!is_dir($pcPath))
00158 mkdir($pcPath, 0755, true);
00159 $uri = ($_SERVER['REQUEST_URI']);
00160 $content = $page->getPage();
00161 $filename = $pcPath . '/' . str_replace(array('/', '~'), array('_', ':'), $uri);
00162 file_put_contents($filename, $content);
00163 }
00164
00173 public static function checkPageCache($uri = null) {
00174 $pcPath = SConfig::getDefault('pageCache.path') . '/' . SConfig::getDefault('common.server');
00175 $uri = $uri ? $uri : $_SERVER['REQUEST_URI'];
00176
00177 $filename = $pcPath . '/' . str_replace(array('/', '~'), array('_', ':'), $uri);
00178
00179 if (file_exists($filename))
00180 return $filename;
00181 else
00182 return false;
00183 }
00184
00194 public static function clearPageCache($uri = null, $whichServer = false) {
00195 if($whichServer === false)
00196 $whichServer = SConfig::getDefault('common.server');
00197 else if($whichServer === true) {
00198 foreach(SConfig::getDefault('scache.servers') as $server)
00199 self::clearPageCache($uri, $server);
00200 return true;
00201 }
00202 else if(!in_array($whichServer, SConfig::getDefault('scache.servers')))
00203 return false;
00204 $pcPath = SConfig::getDefault('pageCache.path') . '/' . $whichServer;
00205 if($uri) {
00206 if($uri === true)
00207 $uri = $_SERVER['REQUEST_URI'];
00208 $filename = $pcPath . '/' . str_replace(array('/', '~'), array('_', ':'), $uri);
00209 unlink($filename);
00210 }
00211 else {
00212 $filepaths = scandir($pcPath);
00213 foreach($filepaths as $rmfile) {
00214 if(is_file("$pcPath/$rmfile")) {
00215 unlink("$pcPath/$rmfile");
00216 }
00217 }
00218 }
00219 return true;
00220 }
00221
00230 public static function getPageCacheCount($whichServer = false) {
00231 if($whichServer === false)
00232 $whichServer = SConfig::getDefault('common.server');
00233 else if(!in_array($whichServer, SConfig::getDefault('scache.servers')))
00234 return false;
00235
00236 $pcPath = SConfig::getDefault('pageCache.path') . '/' . $whichServer;
00237 return count(scandir($pcPath)) - 2;
00238 }
00239
00248 public static function getPageCacheEntries($whichServer = false) {
00249 if($whichServer === false)
00250 $whichServer = SConfig::getDefault('common.server');
00251 else if(!in_array($whichServer, SConfig::getDefault('scache.servers')))
00252 return false;
00253
00254 $icPath = SConfig::getDefault('pageCache.path') . '/' . $whichServer;
00255 $entries = array();
00256 $raw = scandir($icPath);
00257 foreach($raw as $file) {
00258 if($file == '.' || $file == '..')
00259 continue;
00260 $entries[] = str_replace(array('_', ':'), array('/', '~'), $file);
00261 }
00262 return $entries;
00263 }
00264
00272 public static function clearAPC() {
00273 if(function_exists('apc_clear_cache'))
00274 apc_clear_cache('system');
00275 }
00276
00284 public static function getAPCEntries() {
00285 if(!function_exists('apc_cache_info'))
00286 return false;
00287 $info = apc_cache_info('system');
00288 $out = array();
00289 foreach($info['cache_list'] as $entry) {
00290 $out[] = $entry['filename'];
00291 }
00292 return $out;
00293 }
00294
00303 public static function clearAllServers($whichCache) {
00304 if($whichCache != 'includeCache' && $whichCache != 'pageCache')
00305 return;
00306
00307 $dirs = scandir("/var/www/html/$whichCache");
00308 foreach($dirs as $dir) {
00309 if($dir == '.' || $dir == '..')
00310 continue;
00311 $files = scandir("/var/www/html/$whichCache/$dir");
00312 foreach($files as $file) {
00313 if($file == '.' || $file == '..')
00314 continue;
00315 unlink("/var/www/html/$whichCache/$dir/$file");
00316 }
00317 }
00318 }
00319 }
00320
00321 ?>