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

Revision 245, 3.3 KB (checked in by exi, 13 years ago)

Fixed SQL Query caching.
Changed userportraits to use img/portraits.
Added JS code for IE/PNG-fix.

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