source: svn/trunk/admin/xcache.php @ 382

Last change on this file since 382 was 382, checked in by Xuefer, 10 years ago

could not show module info in admin page when XCache is the last module

File size: 4.5 KB
RevLine 
[34]1<?php
2
[123]3include("./common.php");
[34]4
5class Cycle
6{
7    var $values;
8    var $i;
9    var $count;
10
11    function Cycle($v)
12    {
13        $this->values = func_get_args();
14        $this->i = -1;
15        $this->count = count($this->values);
16    }
17
18    function next()
19    {
20        $this->i = ($this->i + 1) % $this->count;
21        return $this->values[$this->i];
22    }
23
24    function cur()
25    {
26        return $this->values[$this->i];
27    }
28
29    function reset()
30    {
31        $this->i = -1;
32    }
33}
34
35function number_formats($a, $keys)
36{
37    foreach ($keys as $k) {
38        $a[$k] = number_format($a[$k]);
39    }
40    return $a;
41}
42
[144]43function size($size)
[34]44{
45    $size = (int) $size;
46    if ($size < 1024)
[144]47        return number_format($size, 2) . ' b';
[34]48
49    if ($size < 1048576)
[144]50        return number_format($size / 1024, 2) . ' K';
[34]51
[144]52    return number_format($size / 1048576, 2) . ' M';
[34]53}
54
55function age($time)
56{
57    if (!$time) return '';
58    $delta = REQUEST_TIME - $time;
59
60    if ($delta < 0) {
61        $delta = -$delta;
62    }
63   
64    static $seconds = array(1, 60, 3600, 86400, 604800, 2678400, 31536000);
[60]65    static $name = array('s', 'm', 'h', 'd', 'w', 'M', 'Y');
[34]66
67    for ($i = 6; $i >= 0; $i --) {
68        if ($delta >= $seconds[$i]) {
69            $ret = (int) ($delta / $seconds[$i]);
[60]70            return $ret . ' ' . $name[$i];
[34]71        }
72    }
[249]73
74    return '0 s';
[34]75}
76
77function switcher($name, $options)
78{
79    $n = isset($_GET[$name]) ? $_GET[$name] : null;
80    $html = array();
81    foreach ($options as $k => $v) {
[250]82        $html[] = sprintf('<a href="?%s=%s"%s>%s</a>', $name, $k, $k == $n ? ' class="active"' : '', $v);
[34]83    }
84    return implode(' ', $html);
85}
86
[133]87if (!extension_loaded('XCache')) {
88    echo '<h1>XCache is not loaded</h1>';
89    ob_start();
90    phpinfo();
91    $info = ob_get_clean();
92    if (preg_match('!<td class="v">(.*\\.ini)!', $info, $m)) {
93        echo "Please check $m[1]";
94    }
95    else {
[142]96        echo "You don't even have a php.ini yet?";
[133]97    }
98    exit;
99}
[34]100$pcnt = xcache_count(XC_TYPE_PHP);
101$vcnt = xcache_count(XC_TYPE_VAR);
102
[371]103if ($_SERVER['REQUEST_METHOD'] == 'POST') {
104    $remove = @ $_POST['remove'];
105    if ($remove && is_array($remove)) {
106        foreach ($remove as $name) {
107            xcache_unset($name);
108        }
109    }
110}
111
[147]112$moduleinfo = null;
[34]113$type_none = -1;
114if (!isset($_GET['type'])) {
115    $_GET['type'] = $type_none;
116}
117$_GET['type'] = $type = (int) $_GET['type'];
118
119// {{{ process clear
120function processClear()
121{
122    $type = isset($_POST['type']) ? $_POST['type'] : null;
123    if ($type != XC_TYPE_PHP && $type != XC_TYPE_VAR) {
124        $type = null;
125    }
126    if (isset($type)) {
127        $cacheid = (int) (isset($_POST['cacheid']) ? $_POST['cacheid'] : 0);
128        if (isset($_POST['clearcache'])) {
129            xcache_clear_cache($type, $cacheid);
130        }
131    }
132}
133processClear();
134// }}}
135// {{{ load info/list
136$cacheinfos = array();
137for ($i = 0; $i < $pcnt; $i ++) {
138    $data = xcache_info(XC_TYPE_PHP, $i);
139    if ($type === XC_TYPE_PHP) {
140        $data += xcache_list(XC_TYPE_PHP, $i);
141    }
142    $data['type'] = XC_TYPE_PHP;
143    $data['cache_name'] = "php#$i";
144    $data['cacheid'] = $i;
145    $cacheinfos[] = $data;
146}
147for ($i = 0; $i < $vcnt; $i ++) {
148    $data = xcache_info(XC_TYPE_VAR, $i);
149    if ($type === XC_TYPE_VAR) {
150        $data += xcache_list(XC_TYPE_VAR, $i);
151    }
152    $data['type'] = XC_TYPE_VAR;
153    $data['cache_name'] = "var#$i";
154    $data['cacheid'] = $i;
155    $cacheinfos[] = $data;
156}
157// }}}
158// {{{ merge the list
159switch ($type) {
160case XC_TYPE_PHP:
161case XC_TYPE_VAR:
162    $cachelist = array('type' => $type, 'cache_list' => array(), 'deleted_list' => array());
163    if ($type == XC_TYPE_VAR) {
164        $cachelist['type_name'] = 'var';
165    }
166    else {
167        $cachelist['type_name'] = 'php';
168    }
169    foreach ($cacheinfos as $i => $c) {
170        if ($c['type'] == $type && isset($c['cache_list'])) {
171            foreach ($c['cache_list'] as $e) {
172                $e['cache_name'] = $c['cache_name'];
173                $cachelist['cache_list'][] = $e;
174            }
175            foreach ($c['deleted_list'] as $e) {
176                $e['cache_name'] = $c['cache_name'];
177                $cachelist['deleted_list'][] = $e;
178            }
179        }
180    }
181    if ($type == XC_TYPE_PHP) {
182        $inodes = array();
[84]183        $haveinode = false;
[34]184        foreach ($cachelist['cache_list'] as $e) {
[114]185            if (isset($e['inode'])) {
186                $haveinode = true;
[84]187            }
[114]188        }
189        if (!$haveinode) {
190            foreach ($cachelist['deleted_list'] as $e) {
191                if (isset($e['inode'])) {
192                    $haveinode = true;
193                }
[34]194            }
195        }
196    }
197    unset($data);
198    break;
199
200default:
201    $_GET['type'] = $type_none;
202    $cachelist = array();
[147]203    ob_start();
204    phpinfo(INFO_MODULES);
205    $moduleinfo = ob_get_clean();
[382]206    if (preg_match('!XCache</a></h2>(.*?)<h2>!is', $moduleinfo, $m)) {
[147]207        $moduleinfo = $m[1];
208    }
209    else {
210        $moduleinfo = null;
211    }
[34]212    break;
213}
214// }}}
215
216$type_php = XC_TYPE_PHP;
217$type_var = XC_TYPE_VAR;
[123]218$types = array($type_none => _T('Statistics'), $type_php => _T('List PHP'), $type_var => _T('List Var Data'));
[107]219$xcache_version = XCACHE_VERSION;
220$xcache_modules = XCACHE_MODULES;
[34]221
222include("xcache.tpl.php");
223
224?>
Note: See TracBrowser for help on using the repository browser.