root/branch/rev3/common/includes/class.cache.php @ 243

Revision 243, 3.0 KB (checked in by exi, 13 years ago)

Moving config to runtime
Added reinforced management
New icon set with alpha, fixed missing/wrong icons
Changed version to 1.4.0
Added code for handling the new dogma codebase

Line 
1<?php
2
3class cache
4{
5    function checkLoad()
6    {
7        if (PHP_OS != 'Linux')
8        {
9            return false;
10        }
11
12        $load = file_get_contents('/proc/loadavg');
13        $array = explode(' ', $load);
14        if ((float)$array[0] > (float)config::get('reinforced_threshold'))
15        {
16            // put killboard into RF
17            config::set('is_reinforced', 1);
18        }
19        else
20        {
21            config::set('is_reinforced', 0);
22        }
23    }
24
25    function shouldCache()
26    {
27        // never cache for admins
28        if (session::isAdmin())
29        {
30            return false;
31        }
32
33        if (config::get('is_reinforced') && count($_POST) == 0)
34        {
35            return true;
36        }
37
38        $cacheignore = explode(',', config::get('cache_ignore'));
39        if (KB_CACHE == 1 && count($_POST) == 0 && !in_array($page, $cacheignore))
40        {
41            return true;
42        }
43        return false;
44    }
45
46    function check($page)
47    {
48        if (cache::shouldCache())
49        {
50            if (!file_exists(KB_CACHEDIR.'/'.KB_SITE))
51            {
52                mkdir(KB_CACHEDIR.'/'.KB_SITE);
53            }
54            $cachefile = KB_CACHEDIR.'/'.KB_SITE.'/'.md5($_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI']).'.cache';
55
56            // cache is unlimited in reinforced mode
57            if (config::get('is_reinforced') && file_exists($cachefile))
58            {
59                ob_start('ob_gzhandler');
60                @readfile($cachefile);
61                ob_end_flush();
62                exit();
63            }
64            elseif (config::get('is_reinforced'))
65            {
66                global $smarty;
67                $smarty->assign('message', 'Note: This killboard has entered reinforced operation mode.');
68            }
69
70            $times = explode(',', config::get('cache_times'));
71            foreach ($times as $string)
72            {
73                $array = explode(':', $string);
74                $cachetimes[$array[0]] = $array[1];
75            }
76
77            if ($cachetimes[$page])
78            {
79                $cachetime = $cachetimes[$page];
80            }
81            else
82            {
83                $cachetime = 5;
84            }
85            $cachetime = $cachetime * 60;
86
87            $timestamp = ((@file_exists($cachefile))) ? @filemtime($cachefile) : 0;
88            if (time() - $cachetime < $timestamp)
89            {
90                ob_start('ob_gzhandler');
91                @readfile($cachefile);
92                ob_end_flush();
93                exit();
94            }
95            ob_start();
96        }
97    }
98
99    function generate()
100    {
101        if (cache::shouldCache())
102        {
103            $cachefile = KB_CACHEDIR.'/'.KB_SITE.'/'.md5($_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI']).'.cache';
104            $fp = @fopen($cachefile, 'w');
105            @fwrite($fp, ob_get_contents());
106            @fwrite($fp, '<!-- Generated from cache -->');
107            @fclose($fp);
108            ob_end_flush();
109        }
110    }
111}
112?>
Note: See TracBrowser for help on using the browser.