-
Notifications
You must be signed in to change notification settings - Fork 131
/
cache.inc.php
66 lines (55 loc) · 2.01 KB
/
cache.inc.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
<?php
Class Cache {
var $hash;
var $path_hash;
var $cachefile;
var $cache_prefix = 'c-';
function __construct($file_path, $template_file) {
# generate an md5 hash from the file_path
$this->path_hash = $this->generate_hash($file_path.':'.$template_file);
# generate an md5 hash from the current state of the site content
$htaccess = file_exists(Config::$root_folder.'.htaccess') ? '.htaccess:'.filemtime(Config::$root_folder.'.htaccess') : '';
$file_cache = serialize(Helpers::file_cache());
$content_hash = $this->generate_hash($htaccess.$file_cache);
# combine the two hashes to create a cachefile name
$this->cachefile = Config::$cache_folder.'/pages/'.$this->cache_prefix.$this->path_hash.'-'.$content_hash;
# store the hash
$this->hash = $this->cache_prefix.$this->path_hash.'-'.$content_hash;
}
function generate_hash($str) {
# generate a 10 character hash
return substr(md5($str), 0, 10);
}
function render() {
# return the contents of the cachefile
return file_get_contents($this->cachefile);
}
function delete_old_caches() {
# collect a list of all cache files matching the same file_path hash and delete them
$old_caches = glob(Config::$cache_folder.'/pages/'.$this->cache_prefix.$this->path_hash.'-*');
foreach($old_caches as $file) unlink($file);
}
function create($route) {
# remove any unused caches for this route
$this->delete_old_caches();
$page = new Page($route);
# start output buffer
ob_start();
echo $page->parse_template();
# if cache folder is writable, write to it
if(is_writable(Config::$cache_folder.'/pages') && !$page->data['bypass_cache']) $this->write_cache();
# end buffer
ob_end_flush();
return '';
}
function expired() {
# check whether the cachefile matching the collated hashes exists
return !file_exists($this->cachefile);
}
function write_cache() {
$fp = fopen($this->cachefile, 'w');
fwrite($fp, ob_get_contents());
fclose($fp);
}
}
?>