Changeset 623 for branches/1.3


Ignore:
Timestamp:
2009-07-05T10:41:16+02:00 (5 years ago)
Author:
moo
Message:

merged r514-r539 from trunk

Location:
branches/1.3
Files:
30 edited

Legend:

Unmodified
Added
Removed
  • branches/1.3

  • branches/1.3/Decompiler.class.php

    r394 r623  
    2929    if (is_array($src)) { 
    3030        die_error('array str'); 
    31         $src = new Decompiler_Array($src); 
    32         return $src->__toString($indent); 
     31        $src = new Decompiler_Array($src, false, $indent); 
     32        return $src->__toString(); 
    3333    } 
    3434 
     
    165165    } 
    166166 
    167     function __toString($indent) 
    168     { 
    169         return $this->obj->__toString($indent); 
     167    function __toString() 
     168    { 
     169        return $this->obj->__toString(); 
    170170    } 
    171171} 
     
    258258{ 
    259259    var $needExport = false; 
    260  
    261     function Decompiler_Array($value = array(), $needexport = false) 
     260    var $indent = ''; 
     261 
     262    function Decompiler_Array($value = array(), $needexport = false, $indent = '') 
    262263    { 
    263264        $this->value = $value; 
    264265        $this->needExport = $needexport; 
    265     } 
    266  
    267     function __toString($indent) 
     266        $this->indent = $indent; 
     267    } 
     268 
     269    function __toString() 
    268270    { 
    269271        $exp = "array("; 
    270         $indent .= INDENT; 
     272        $indent = $this->indent . INDENT; 
    271273        $assoclen = 0; 
    272274        $multiline = 0; 
     
    335337    var $iskey; 
    336338 
    337     function __toString($indent) 
     339    function __toString() 
    338340    { 
    339341        return 'foreach (' . ''; 
  • branches/1.3/admin/common-zh-simplified-utf-8.lang.php

    r604 r623  
    2424        'Compiling' 
    2525        => '编译中', 
    26         '%' 
    27         => '%', 
     26        '% Free' 
     27        => '% 剩余', 
     28        '% Used' 
     29        => '% 已用', 
    2830        'Hits' 
    2931        => '命中', 
     32        'Hits 24H' 
     33        => '24H 分布', 
     34        'Hits/H' 
     35        => '命中/H', 
     36        'Hits/S' 
     37        => '命中/S', 
    3038        'Misses' 
    3139        => '错过', 
     
    6977        'GC' 
    7078        => 'GC', 
     79        'Legends:' 
     80        => '图例:', 
     81        'Used Blocks' 
     82        => '已用块', 
     83        'Free Blocks' 
     84        => '未用块', 
     85        'Total' 
     86        => '总共', 
    7187        'Cache' 
    7288        => '缓冲区', 
  • branches/1.3/admin/common-zh-traditional-utf-8.lang.php

    r604 r623  
    2424        'Compiling' 
    2525        => '編譯中', 
    26         '%' 
    27         => '%', 
     26        '% Free' 
     27        => '% 剩余', 
     28        '% Used' 
     29        => '% 已用', 
    2830        'Hits' 
    2931        => '命中', 
     32        'Hits 24H' 
     33        => '24H 分布', 
     34        'Hits/H' 
     35        => '命中/H', 
     36        'Hits/S' 
     37        => '命中/S', 
    3038        'Misses' 
    3139        => '錯過', 
     
    6977        'GC' 
    7078        => 'GC', 
     79        'Legends:' 
     80        => '图例:', 
     81        'Used Blocks' 
     82        => '已用块', 
     83        'Free Blocks' 
     84        => '未用块', 
     85        'Total' 
     86        => '总共', 
    7187        'Cache' 
    7288        => '快取', 
  • branches/1.3/admin/common.php

    r607 r623  
    109109    $lang = 'en-us'; 
    110110} 
     111if (!isset($usage_graph_width) && !isset($free_graph_width)) { 
     112    $usage_graph_width = 120; 
     113} 
     114$graph_width = isset($free_graph_width) ? $free_graph_width : $usage_graph_width; 
    111115 
    112116?> 
  • branches/1.3/admin/config.php.example

    r604 r623  
    1212$show_todo_strings = false; 
    1313 
     14// width of graph for free or usage blocks 
     15$usage_graph_width = 120; 
     16// do not define both with 
     17// $free_graph_width = 120; 
     18 
    1419// this function is detected by xcache.tpl.php, and enabled if function_exists 
    1520// this ob filter is applied for the cache list, not the whole page 
     
    1722{ 
    1823    $sep = DIRECTORY_SEPARATOR; 
    19     $o = str_replace($_SERVER['DOCUMENT_ROOT'],  "{DOCROOT}$sep", $o); 
     24    $o = str_replace($_SERVER['DOCUMENT_ROOT'],  "{DOCROOT}" . (substr($d, -1) == $sep ? $sep : ""), $o); 
    2025    $xcachedir = realpath(dirname(__FILE__) . "$sep..$sep"); 
    2126    $o = str_replace($xcachedir . $sep, "{XCache}$sep", $o); 
  • branches/1.3/admin/header.tpl.php

    r604 r623  
    1 <!DOCTYPE HTML PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> 
     1<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> 
    22<html xmlns="http://www.w3.org/1999/xhtml"> 
    33<head> 
  • branches/1.3/admin/help-en.lang.php

    r604 r623  
    44<dt><?php echo _T('Size'); ?>: </dt><dd>Cache Size, Size of the cache (or cache chunk), in bytes</dd> 
    55<dt><?php echo _T('Avail'); ?>: </dt><dd>Available Memory, free memory in bytes of this cache</dd> 
    6 <dt><?php echo _T('%'); ?>: </dt><dd>Percent, A bar shows how much memory available in percent</dd> 
     6<dt><?php echo _T('% Used'); ?>: </dt><dd>Percent, A bar shows how much memory available in percent, and memory blocks status</dd> 
    77<dt><?php echo _T('Clear'); ?>: </dt><dd>Clear Button, Press the button to clean this cache</dd> 
    88<dt><?php echo _T('Compiling'); ?>: </dt><dd>Compiling flag, "yes" if the cache is busy compiling php script</dd> 
    99<dt><?php echo _T('Hits'); ?>: </dt><dd>Cache Hits, hit=a var/php is loaded from this cache</dd> 
     10<dt><?php echo _T('Hits/H'); ?>: </dt><dd>Average Hits per Hour. Only last 24 hours is logged</dd> 
     11<dt><?php echo _T('Hits 24H'); ?>: </dt><dd>Hits 24 Hours. Hits graph of last 24 hours</dd> 
     12<dt><?php echo _T('Hits/S'); ?>: </dt><dd>Average Hits per Second. Only last 5 seconds is logged</dd> 
    1013<dt><?php echo _T('Misses'); ?>: </dt><dd>Cache Misses, miss=a var/php is requested but not in the cache</dd> 
    1114<dt><?php echo _T('Clogs'); ?>: </dt><dd>Compiling Clogs, clog=compiling is needed but avoided to wait(be blocked) when the cache is busy compiling already</dd> 
  • branches/1.3/admin/help-zh-simplified-utf-8.lang.php

    r604 r623  
    44<dt><?php echo _T('Size'); ?>: </dt><dd>共享内存区大小, 单位: 字节</dd> 
    55<dt><?php echo _T('Avail'); ?>: </dt><dd>可用内存, 对应共享内存区的剩余内存字节数</dd> 
    6 <dt><?php echo _T('%'); ?>: </dt><dd>百分比, 条状显示可用内存的比例</dd> 
     6<dt><?php echo _T('% Used'); ?>: </dt><dd>百分比, 条状显示可用内存的比例, 以及显示分配块状态</dd> 
    77<dt><?php echo _T('Clear'); ?>: </dt><dd>清除按钮, 点击按钮清除对应共享内存区的数据</dd> 
    88<dt><?php echo _T('Compiling'); ?>: </dt><dd>编译标记, 当共享内存区正在编译 php 脚本时标记为 "yes"</dd> 
    99<dt><?php echo _T('Hits'); ?>: </dt><dd>共享内存命中次数, 命中=从该共享内存载入php或者变量</dd> 
     10<dt><?php echo _T('Hits/H'); ?>: </dt><dd>每小时命中次数. 只统计最后 24 小时</dd> 
     11<dt><?php echo _T('Hits 24H'); ?>: </dt><dd>24 小时命中分布图. 图表现是最后 24 小时的命中次数</dd> 
     12<dt><?php echo _T('Hits/S'); ?>: </dt><dd>每秒命中次数. 只统计最后 5 秒</dd> 
    1013<dt><?php echo _T('Misses'); ?>: </dt><dd>共享内存错过次数, 错过=请求的php或者变量并不在该共享内存内</dd> 
    1114<dt><?php echo _T('Clogs'); ?>: </dt><dd>编译阻塞跳过, 阻塞=当需该共享内存区负责编译时, 其他进程/现成无法访问此共享内存. 跳过=XCache 自动判断阻塞的共享内存区自动跳过阻塞等待, 直接使用非共享内存方式继续处理请求</dd> 
  • branches/1.3/admin/help-zh-traditional-utf-8.lang.php

    r604 r623  
    44<dt><?php echo _T('Size'); ?>: </dt><dd>共享記憶體區大小,單位:位元</dd> 
    55<dt><?php echo _T('Avail'); ?>: </dt><dd>可用記憶體,對應共享記憶體區的剩餘記憶體位元數</dd> 
    6 <dt><?php echo _T('%'); ?>: </dt><dd>百分比,條狀顯示可用記憶體的比例</dd> 
     6<dt><?php echo _T('% Used'); ?>: </dt><dd>百分比,條狀顯示可用記憶體的比例</dd> 
    77<dt><?php echo _T('Clear'); ?>: </dt><dd>清除按鈕,點擊按鈕清除對應共享記憶體區的資料</dd> 
    88<dt><?php echo _T('Compiling'); ?>: </dt><dd>編譯標記,當共享記憶體區正在編譯 php 指令時標記為 "yes"</dd> 
  • branches/1.3/admin/xcache.css

    r604 r623  
    11input, table { font-family: sans-serif; } 
    22input { font-size: 12px; } 
    3 table { border-collapse: collapse; font-size: 11px; } 
     3table { border-collapse: collapse; font-size: 11px; margin: 0; margin-bottom: 10px; } 
     4table caption, h2 { font-size: 16px; font-weight: bold; text-align: left; padding-top: 20px; margin-bottom: 2px; } 
     5table { white-space: pre; } 
    46table.cycles { border: 1px solid black; margin-top: 5px; margin-bottom: 5px; } 
    57table.cycles .col1 { background-color: #f5f5f5; } 
     
    1719.button { } 
    1820span.sortarrow { color: white; text-decoration: none; } 
    19 .freeblocks { float: left; margin-right: 4px;} 
    20 .freeblocks td { text-align: right; } 
    2121form {margin: 0; padding: 0} 
    22 .percent { border: 1px solid black; width: 80%; height: 20px; } 
    23 .percent div { font-size: 1px; line-height: 1px; width: 100%;} 
    24 .percent .pavail { background: blue; } 
    25 .switcher, h1, h2 { text-align: center; display: block; } 
     22 
     23.percent { height: 3px; margin-bottom: 1px; border: 1px solid gray; } 
     24.percent div { float: left; height: 100%; } 
     25.pvalue { background: limegreen; } 
     26 
     27.blocksgraph { height: 16px; } 
     28.blocksgraph div { float: left; height: 3px; width: 4px; border: solid gray; border-width: 0 0px 1px 0; } 
     29.blocksgraph { border: 1px solid gray; border-bottom: 0px; } 
     30 
     31.hitsgraph { height: 20px; margin: auto; } 
     32.hitsgraph div { float: left; width: 2px; height: 100%; } 
     33.hitsgraph div:hover { background: gray; } 
     34.hitsgraph div div { float: none; width: 100%; } 
     35.hitsgraph div div.barf { border: 0px solid gray; border-width: 1px 0 0 0; } 
     36.hitsgraph div div.barv { border: 0px solid gray; border-width: 0 0 1px 0; } 
     37.hitsgraph div div.barf.active { border-color: yellow; } 
     38.hitsgraph div div.barv.active { border-color: yellow; } 
     39 
     40.switcher, h1 { text-align: center; display: block; } 
    2641.switcher * { color: blue; } 
    2742.switcher a.active { font-weight: bold; font-size: 130%; color: black; } 
     
    3146dt { font-weight: bold; clear: both; float: left; width: 100px; text-align: right; margin: 0; } 
    3247dd { margin: 0; } 
     48.blockarea { overflow: hidden; _width: 1px; } 
     49div.legend { float: left; border: 1px solid gray; font: 12px/12px monospace; } 
     50div.legendtitle { float: left; padding: 2px; padding-right: 10px; font: 12px/12px monospace; } 
  • branches/1.3/admin/xcache.php

    r604 r623  
    7373 
    7474    return '0 s'; 
     75} 
     76 
     77function freeblock_to_graph($freeblocks, $size) 
     78{ 
     79    global $graph_width, $usage_graph_width, $free_graph_width; 
     80 
     81    // cached in static variable 
     82    static $graph_initial; 
     83    if (!isset($graph_initial)) { 
     84        $graph_initial = array_fill(0, $graph_width, 0); 
     85    } 
     86    $graph = $graph_initial; 
     87    foreach ($freeblocks as $b) { 
     88        $begin = $b['offset'] / $size * $graph_width; 
     89        $end = ($b['offset'] + $b['size']) / $size * $graph_width; 
     90 
     91        if ((int) $begin == (int) $end) { 
     92            $v = $end - $begin; 
     93            $graph[(int) $v] += $v - (int) $v; 
     94        } 
     95        else { 
     96            $graph[(int) $begin] += 1 - ($begin - (int) $begin); 
     97            $graph[(int) $end] += $end - (int) $end; 
     98            for ($i = (int) $begin + 1, $e = (int) $end; $i < $e; $i ++) { 
     99                $graph[$i] += 1; 
     100            } 
     101        } 
     102    } 
     103    $html = array(); 
     104    $c = 255; 
     105    foreach ($graph as $k => $v) { 
     106        if (!isset($free_graph_width)) { 
     107            $v = 1 - $v; 
     108        } 
     109        $v = (int) ($v * $c); 
     110        $r = $g = $c - $v; 
     111        $b = $c; 
     112        $html[] = '<div style="background: rgb(' . "$r,$g,$b" . ')"></div>'; 
     113    } 
     114    return implode('', $html); 
     115} 
     116 
     117function calc_total(&$total, $data) 
     118{ 
     119    foreach ($data as $k => $v) { 
     120        switch ($k) { 
     121        case 'type': 
     122        case 'cache_name': 
     123        case 'cacheid': 
     124        case 'free_blocks': 
     125            continue 2; 
     126        } 
     127        if (!isset($total[$k])) { 
     128            $total[$k] = $v; 
     129        } 
     130        else { 
     131            switch ($k) { 
     132            case 'his_by_hour': 
     133            case 'his_by_second': 
     134                foreach ($data[$k] as $kk => $vv) { 
     135                    $total[$k][$kk] += $vv; 
     136                } 
     137                break; 
     138 
     139            default: 
     140                $total[$k] += $v; 
     141            } 
     142        } 
     143    } 
     144} 
     145 
     146function array_avg($a) 
     147{ 
     148    if (count($a) == 0) { 
     149        return ''; 
     150    } 
     151    return array_sum($a) / count($a); 
     152} 
     153 
     154function bar_hits_percent($v, $percent, $active) 
     155{ 
     156    $r = 220 + (int) ($percent * 25); 
     157    $g = $b = 220 - (int) ($percent * 220); 
     158    $percent = (int) ($percent * 100); 
     159    $a = $active ? ' active' : ''; 
     160    return '<div title="' . $v . '">' 
     161        . '<div class="barf' . $a . '" style="height: ' . (100 - $percent) . '%"></div>' 
     162        . '<div class="barv' . $a . '" style="background: rgb(' . "$r,$g,$b" . '); height: ' . $percent . '%"></div>' 
     163        . '</div>'; 
     164} 
     165 
     166function hits_to_graph($hits) 
     167{ 
     168    $max = 0; 
     169    foreach ($hits as $v) { 
     170        if ($max < $v) { 
     171            $max = $v; 
     172        } 
     173    } 
     174    if (!$max) { 
     175        return ''; 
     176    } 
     177    $t = (time() / (60 * 60)) % 24; 
     178    $html = array(); 
     179    foreach ($hits as $i => $v) { 
     180        $html[] = bar_hits_percent($v, $v / $max, $i == $t); 
     181    } 
     182    return implode('', $html); 
    75183} 
    76184 
     
    130238        $cacheid = (int) (isset($_POST['cacheid']) ? $_POST['cacheid'] : 0); 
    131239        if (isset($_POST['clearcache'])) { 
    132             xcache_clear_cache($type, $cacheid); 
     240            $count = xcache_count($type); 
     241            if ($cacheid == $count) { 
     242                for ($cacheid = 0; $cacheid < $count; $cacheid ++) { 
     243                    xcache_clear_cache($type, $cacheid); 
     244                } 
     245            } 
     246            else { 
     247                xcache_clear_cache($type, $cacheid); 
     248            } 
    133249        } 
    134250    } 
     
    138254// {{{ load info/list 
    139255$cacheinfos = array(); 
     256$total = array(); 
    140257for ($i = 0; $i < $pcnt; $i ++) { 
    141258    $data = xcache_info(XC_TYPE_PHP, $i); 
     
    147264    $data['cacheid'] = $i; 
    148265    $cacheinfos[] = $data; 
    149 } 
     266    if ($pcnt >= 2) { 
     267        calc_total($total, $data); 
     268    } 
     269} 
     270 
     271if ($pcnt >= 2) { 
     272    $total['type'] = XC_TYPE_PHP; 
     273    $total['cache_name'] = _T('Total'); 
     274    $total['cacheid'] = $pcnt; 
     275    $total['gc'] = null; 
     276    $total['istotal'] = true; 
     277    $cacheinfos[] = $total; 
     278} 
     279 
     280$total = array(); 
    150281for ($i = 0; $i < $vcnt; $i ++) { 
    151282    $data = xcache_info(XC_TYPE_VAR, $i); 
     
    157288    $data['cacheid'] = $i; 
    158289    $cacheinfos[] = $data; 
     290    if ($pcnt >= 2) { 
     291        calc_total($total, $data); 
     292    } 
     293} 
     294 
     295if ($vcnt >= 2) { 
     296    $total['type'] = XC_TYPE_VAR; 
     297    $total['cache_name'] = _T('Total'); 
     298    $total['cacheid'] = $vcnt; 
     299    $total['gc'] = null; 
     300    $total['istotal'] = true; 
     301    $cacheinfos[] = $total; 
    159302} 
    160303// }}} 
     
    171314    } 
    172315    foreach ($cacheinfos as $i => $c) { 
     316        if (!empty($c['istotal'])) { 
     317            continue; 
     318        } 
    173319        if ($c['type'] == $type && isset($c['cache_list'])) { 
    174320            foreach ($c['cache_list'] as $e) { 
  • branches/1.3/admin/xcache.tpl.php

    r604 r623  
    11<?php include("header.tpl.php"); ?> 
    2 <a href="help.php" target="_blank" id="help"><?php echo _T("Help") ?> &raquo;</a> 
    3 <span class="switcher"><?php echo switcher("type", $types); ?></span> 
     2<div id="help"> 
     3    <a href="help.php"><?php echo _T("Help") ?> &raquo;</a> 
     4</div> 
     5<div class="switcher"><?php echo switcher("type", $types); ?></div> 
    46<?php 
    57$a = new Cycle('class="col1"', 'class="col2"'); 
    68$b = new Cycle('class="col1"', 'class="col2"'); 
    79?> 
    8 <?php echo _T('Caches'); ?>: 
    910<table cellspacing="0" cellpadding="4" class="cycles"> 
    10     <col /> 
    11     <col align="right" /> 
    12     <col align="right" /> 
    13     <col align="right" /> 
    14     <col /> 
    15     <col /> 
    16     <col align="right" /> 
     11    <caption><?php echo _T('Caches'); ?></caption> 
     12    <col /> 
     13    <col align="right" /> 
     14    <col align="right" /> 
     15    <col align="right" /> 
     16    <col /> 
     17    <col /> 
     18    <col align="right" /> 
     19    <col align="right" /> 
     20    <col align="right" /> 
     21    <col /> 
    1722    <col align="right" /> 
    1823    <col align="right" /> 
     
    2833        <th><?php echo _T('Size'); ?></th> 
    2934        <th><?php echo _T('Avail'); ?></th> 
    30         <th><?php echo _T('%'); ?></th> 
     35        <th><?php echo _T(isset($free_graph_width) ? '% Free' : '% Used'); ?></th> 
    3136        <th><?php echo _T('Clear'); ?></th> 
    3237        <th><?php echo _T('Compiling'); ?></th> 
    3338        <th><?php echo _T('Hits'); ?></th> 
     39        <th><?php echo _T('Hits/H'); ?></th> 
     40        <th><?php echo _T('Hits 24H'); ?></th> 
     41        <th><?php echo _T('Hits/S'); ?></th> 
    3442        <th><?php echo _T('Misses'); ?></th> 
    3543        <th><?php echo _T('Clogs'); ?></th> 
     
    4856        echo " 
    4957        <tr ", $a->next(), ">"; 
    50         $pavail = (int) ($ci['avail'] / $ci['size'] * 100); 
    51         $pused = 100 - $pavail; 
     58        $pvalue = (int) ($ci['avail'] / $ci['size'] * 100); 
     59        $pempty = 100 - $pvalue; 
     60        if (!isset($free_graph_width)) { 
     61            // swap 
     62            $tmp = $pvalue; 
     63            $pvalue = $pempty; 
     64            $pempty = $tmp; 
     65        } 
     66 
     67        $w = $graph_width; 
     68        if (empty($ci['istotal'])) { 
     69            $graph = freeblock_to_graph($ci['free_blocks'], $ci['size']); 
     70            $blocksgraph = "<div class=\"blocksgraph\" style=\"width: {$w}px\">{$graph}</div>"; 
     71        } 
     72        else { 
     73            $blocksgraph = ''; 
     74        } 
    5275 
    5376        $ci_slots = size($ci['slots']); 
     
    5578        $ci_avail = size($ci['avail']); 
    5679        $ci = number_formats($ci, $numkeys); 
    57         $ci['compiling']    = $ci['type'] == $type_php ? ($ci['compiling'] ? 'yes' : 'no') : '-'; 
    58         $ci['can_readonly'] = $ci['can_readonly'] ? 'yes' : 'no'; 
     80 
     81        $hits_avg_h     = number_format(array_avg($ci['hits_by_hour']), 2); 
     82        $hits_avg_s     = number_format(array_avg($ci['hits_by_second']), 2); 
     83        $hits_graph_h   = hits_to_graph($ci['hits_by_hour']); 
     84        $hits_graph_h_w = count($ci['hits_by_hour']) * 2; 
     85 
     86        if (!empty($ci['istotal'])) { 
     87            $ci['compiling']    = '-'; 
     88            $ci['can_readonly'] = '-'; 
     89        } 
     90        else { 
     91            $ci['compiling']    = $ci['type'] == $type_php ? ($ci['compiling'] ? 'yes' : 'no') : '-'; 
     92            $ci['can_readonly'] = $ci['can_readonly'] ? 'yes' : 'no'; 
     93        } 
    5994        echo <<<EOS 
    6095        <th>{$ci['cache_name']}</th> 
     
    6297        <td title="{$ci['size']}">{$ci_size}</td> 
    6398        <td title="{$ci['avail']}">{$ci_avail}</td> 
    64         <td title="{$pavail} %"><div class="percent"><div style="height: {$pused}%" class="pused">&nbsp;</div><div style="height: {$pavail}%" class="pavail">&nbsp;</div></div></td> 
    65         <td> 
    66             <form method="post"> 
    67                 <div> 
    68                     <input type="hidden" name="type" value="{$ci['type']}"> 
    69                     <input type="hidden" name="cacheid" value="{$ci['cacheid']}"> 
    70                     <input type="submit" name="clearcache" value="{$l_clear}" class="submit" onclick="return confirm('{$l_clear_confirm}');" /> 
    71                 </div> 
    72             </form> 
    73         </td> 
     99        <td title="{$pvalue} %" 
     100            ><div class="percent" style="width: {$w}px" 
     101                ><div style="width: {$pvalue}%" class="pvalue"></div 
     102                ><div style="width: {$pempty}%" class="pempty"></div 
     103            ></div 
     104        >{$blocksgraph}</td> 
     105        <td 
     106            ><form method="post" action="" 
     107                ><div 
     108                    ><input type="hidden" name="type" value="{$ci['type']}" 
     109                    /><input type="hidden" name="cacheid" value="{$ci['cacheid']}" 
     110                    /><input type="submit" name="clearcache" value="{$l_clear}" class="submit" onclick="return confirm('{$l_clear_confirm}');" 
     111                /></div 
     112            ></form 
     113        ></td> 
    74114        <td>{$ci['compiling']}</td> 
    75115        <td>{$ci['hits']}</td> 
     116        <td>{$hits_avg_h}</td> 
     117        <td><div class="hitsgraph" style="width: {$hits_graph_h_w}px">{$hits_graph_h}</div></td> 
     118        <td>{$hits_avg_s}</td> 
    76119        <td>{$ci['misses']}</td> 
    77120        <td>{$ci['clogs']}</td> 
     
    89132    <?php } ?> 
    90133</table> 
    91 <div> 
    92     <?php echo _T('Free Blocks'); ?>: 
     134<div class="blockarea legends"> 
     135    <div class="legendtitle"><?php echo _T('Legends:'); ?></div> 
     136    <div class="legend pvalue">&nbsp;&nbsp;</div> 
     137    <div class="legendtitle"><?php echo _T(isset($free_graph_width) ? '% Free' : '% Used'); ?></div> 
     138    <div class="legend" style="background: rgb(0,0,255)">&nbsp;&nbsp;</div> 
     139    <div class="legendtitle"><?php echo _T(isset($free_graph_width) ? 'Free Blocks' : 'Used Blocks'); ?></div> 
     140    <div class="legend" style="background: rgb(255,0,0)">&nbsp;&nbsp;</div> 
     141    <div class="legendtitle"><?php echo _T('Hits'); ?></div> 
    93142</div> 
    94 <?php 
    95 foreach ($cacheinfos as $i => $ci) { 
    96     $b->reset(); 
    97 ?> 
    98 <table cellspacing="0" cellpadding="4" class="cycles freeblocks"> 
    99     <tr> 
    100         <th><?php echo $ci['cache_name']; ?> <?php echo _T("size"); ?><br><?php echo _T("offset"); ?></th> 
    101     <?php 
    102     foreach ($ci['free_blocks'] as $block) { 
    103         $size   = size($block['size']); 
    104         $offset = size($block['offset']); 
    105  
    106         $c = $b->next(); 
    107         echo " 
    108         <td $c><nobr>$size<br>$offset</nobr></td>"; 
    109     } 
    110     ?> 
    111  
    112     </tr> 
    113 </table> 
    114 <?php 
    115 } 
    116 ?> 
    117 <div style="clear: both">&nbsp;</div> 
    118143<?php 
    119144 
     
    125150    foreach (array('Cached' => $cachelist['cache_list'], 'Deleted' => $cachelist['deleted_list']) as $listname => $entries) { 
    126151        $a->reset(); 
    127         echo " 
    128         <caption>", _T("{$cachelist['type_name']} $listname"), "</caption>"; 
    129152        ?> 
    130153 
    131154    <form action="" method="post"> 
    132     <table cellspacing="0" cellpadding="4" class="cycles entrys" width="100%"> 
     155    <table cellspacing="0" cellpadding="4" class="cycles entries" width="100%"> 
     156        <caption><?php echo _T("{$cachelist['type_name']} $listname"); ?></caption> 
    133157        <col /> 
    134158        <col /> 
  • branches/1.3/coverager.c

    r617 r623  
    470470 
    471471    if (cfg_get_string("xcache.coveragedump_directory", &xc_coveragedump_dir) == SUCCESS && xc_coveragedump_dir) { 
     472        xc_coveragedump_dir = pestrdup(xc_coveragedump_dir, 1); 
    472473        int len = strlen(xc_coveragedump_dir); 
    473474        if (len) { 
     
    477478        } 
    478479        if (!strlen(xc_coveragedump_dir)) { 
     480            pefree(xc_coveragedump_dir, 1); 
    479481            xc_coveragedump_dir = NULL; 
    480482        } 
     
    490492    } 
    491493    if (xc_coveragedump_dir) { 
     494        pefree(xc_coveragedump_dir, 1); 
    492495        xc_coveragedump_dir = NULL; 
    493496    } 
  • branches/1.3/coverager/config.php.example

    r604 r623  
    2222{ 
    2323    $sep = DIRECTORY_SEPARATOR; 
    24     $o = str_replace($_SERVER['DOCUMENT_ROOT'],  "{DOCROOT}$sep", $o); 
     24    $o = str_replace($_SERVER['DOCUMENT_ROOT'],  "{DOCROOT}" . (substr($d, -1) == $sep ? $sep : ""), $o); 
    2525    $xcachedir = realpath(dirname(__FILE__) . "$sep..$sep"); 
    2626    $o = str_replace($xcachedir . $sep, "{XCache}$sep", $o); 
  • branches/1.3/coverager/coverager.css

    r615 r623  
    33th { font-size: 12px; } 
    44table { border-collapse: collapse; } 
     5table.center { margin-left: auto; margin-right: auto; } 
     6table\-center { text-align: center; } 
    57table.cycles { border: 1px solid black; margin-top: 5px; margin-bottom: 5px; } 
    68table.cycles .col1 { background-color: #f5f5f5; } 
     
    5557.lineCov   { background-color: #F0F0F0; } 
    5658.lineNoCov { background-color: #ffe0e0; } 
     59div.code { 
     60    border: 1px solid gray; 
     61    font-size: 12px; 
     62} 
    5763pre.code { 
    5864    font-family: monospace; 
    5965    font-size: 12px; 
    6066    white-space: pre; 
    61     border: 1px solid gray; 
     67    padding: 0; margin: 0; 
    6268} 
    6369 
  • branches/1.3/coverager/coverager.php

    r615 r623  
    114114                $lines = explode('<br />', $lines); 
    115115                $last = array_pop($lines); 
     116                $lines[count($lines) - 1] .= $last; 
    116117                $filecov = sprint_cov($fileinfo['cov'], $lines, false); 
    117                 $filecov .= $last; 
    118118                unset($source); 
    119119            } 
     
    325325        } 
    326326        if (isset($cov[$offs])) { 
    327             $lines[$l] = sprintf("<li class=\"line%sCov\"> %s\t%s\n</li>" 
     327            $lines[$l] = sprintf("<li class=\"line%sCov\"><pre class=\"code\"> %s\t%s\n</pre></li>" 
    328328                    , $cov[$offs] ? '' : 'No' 
    329329                    , $cov[$offs] 
     
    331331        } 
    332332        else { 
    333             $lines[$l] = "<li>\t$line\n</li>"; 
     333            $lines[$l] = "<li><pre class=\"code\">\t$line\n</pre></li>"; 
    334334        } 
    335335    } 
  • branches/1.3/coverager/coverager.tpl.php

    r600 r623  
    1 <!DOCTYPE HTML PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> 
     1<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> 
    22<html xmlns="http://www.w3.org/1999/xhtml"> 
    33<head> 
     
    5656    $l_tds = _T("TODO"); 
    5757    return <<<EOS 
    58     <table align="center" cellpadding="2" cellspacing="0" border="0" class="cycles"> 
     58<div class="table-center"> 
     59    <table cellpadding="2" cellspacing="0" border="0" class="cycles center"> 
    5960    <tr> 
    6061        <th>{$l_dir}</th><th>{$l_per}</th><th>{$l_hit}</th><th>{$l_lns}</th><th>{$l_tds}</th> 
     
    105106    return <<<EOS 
    106107    </table> 
     108</div> 
    107109EOS; 
    108110} 
     
    117119    $l_lns = _T("Lines"); 
    118120    return <<<EOS 
    119     <br> 
    120     <table align="center" cellpadding="2" cellspacing="0" border="0" class="cycles"> 
     121<div class="center-table"> 
     122    <table cellpadding="2" cellspacing="0" border="0" class="cycles center"> 
    121123    <tr> 
    122124        <th>{$l_fil}</th><th>{$l_per}</th><th>{$l_hit}</th><th>{$l_lns}</th> 
     
    162164    return <<<EOS 
    163165    </table> 
     166</div> 
    164167EOS; 
    165168} 
     
    172175    $path_html = htmlspecialchars($path); 
    173176    echo <<<EOS 
    174     <a href="?">$l_root</a> $path<br /> 
     177    <div> 
     178        <a href="?">$l_root</a> $path<br /> 
     179    </div> 
    175180EOS; 
    176181    echo dir_head($dirinfo); 
     
    199204    $dir_html = htmlspecialchars($dir); 
    200205    echo <<<EOS 
    201     <a href="?">$l_root</a> <a href="?path={$dir_url}">{$dir_html}</a>/<strong>{$filename}</strong><br /> 
     206    <div> 
     207        <a href="?">$l_root</a> <a href="?path={$dir_url}">{$dir_html}</a>/<strong>{$filename}</strong><br /> 
     208    </div> 
    202209EOS; 
    203210 
     
    209216        $tplfile_html = htmlspecialchars($tplfile); 
    210217        echo <<<EOS 
    211         <a href="#tpl">{$tplfile_html}</a><br /> 
     218        <div> 
     219            <a href="#tpl">{$tplfile_html}</a><br /> 
     220        </div> 
    212221EOS; 
    213222    } 
     
    216225    } 
    217226    echo <<<EOS 
    218     <pre class="code"><ol>{$filecov}</ol></pre> 
     227    <div class="code"> 
     228        <ol>{$filecov}</ol> 
     229    </div> 
    219230EOS; 
    220231    if ($tplfile) { 
    221232        echo <<<EOS 
    222233    <a name="tpl">{$tplfile}</a> 
    223     <pre class="code"><ol>{$tplcov}</ol></pre> 
     234    <div class="code"> 
     235        <ol>{$tplcov}</ol> 
     236    </div> 
    224237EOS; 
    225238    } 
  • branches/1.3/mkopcode_spec.awk

    r394 r623  
    1515            exit 
    1616        } 
    17         printf "\tOPSPEC(%10s, %10s, %10s, %10s)\n", array[1], array[2], array[3], array[4] 
     17        comment = ""; 
     18        if (match($0, /\/\* (\d+) \*\//, comments)) { 
     19            comment = comments[1]; 
     20        } 
     21        printf "\tOPSPEC(%10s, %10s, %10s, %10s)%s\n", array[1], array[2], array[3], array[4], comment; 
    1822        next 
    1923    } 
  • branches/1.3/phpdc.phpr

    r604 r623  
    1313} 
    1414 
    15 $dc = &new Decompiler(); 
     15$dc = new Decompiler(); 
    1616if (isset($argv[1])) { 
    1717    $dc->decompileFile($argv[1]); 
  • branches/1.3/processor/hashtable.m4

    r622 r623  
    123123                fprintf(stderr, "$2:\""); 
    124124                xc_dprint_str_len(BUCKET_KEY_S(b), BUCKET_KEY_SIZE(b)); 
    125                 fprintf(stderr, "\" %d:h=%lu", BUCKET_KEY_SIZE(b), b->h); 
     125                fprintf(stderr, "\" %d:h=%lu ", BUCKET_KEY_SIZE(b), b->h); 
    126126            ') 
    127127            if (sizeof(void *) == sizeof($2)) { 
  • branches/1.3/processor/processor.m4

    r622 r623  
    211211                dnl fprintf(stderr, "copy from %p to %p\n", src[0], dst[0]); 
    212212            ') 
    213             IFDPRINT(`INDENT()`'fprintf(stderr, "[%p]", src[0]);') 
     213            IFDPRINT(`INDENT()`'fprintf(stderr, "[%p] ", src[0]);') 
    214214            STRUCT_P_EX(zval, dst[0], src[0], `[0]', `', ` ') 
    215215            FIXPOINTER_EX(zval, dst[0]) 
     
    475475    IFCOPY(` 
    476476        switch (src->opcode) { 
     477#ifdef ZEND_GOTO 
     478            case ZEND_GOTO: 
     479#endif 
    477480            case ZEND_JMP: 
    478481                dst->op1.u.jmp_addr = processor->active_opcodes_dst + (src->op1.u.jmp_addr - processor->active_opcodes_src); 
  • branches/1.3/processor/struct.m4

    r394 r623  
    6060 
    6161        IFDPRINT(` 
    62             fprintf(stderr, "%s", " {\n"); 
     62            fprintf(stderr, "%s", "{\n"); 
    6363            indent ++; 
    6464        ') 
     
    146146    DBG(`$0($*)') 
    147147    if (src->$2) { 
    148         IFDPRINT(`INDENT()`'fprintf(stderr, "$1:$2");') 
     148        IFDPRINT(`INDENT()`'fprintf(stderr, "$1:$2 ");') 
    149149        STRUCT_P_EX(`$1', `dst->$2', `src->$2', `$2', `$3') 
    150150    } 
     
    160160    DBG(`$0($*)') 
    161161    assert(sizeof($1) == sizeof(src->$2)); 
    162     IFDPRINT(`INDENT()`'fprintf(stderr, "$1:$2");') 
     162    IFDPRINT(`INDENT()`'fprintf(stderr, "$1:$2 ");') 
    163163    STRUCT_P_EX(`$1', `dst->$2', `src->$2', `$2', `$3', `&') 
    164164    DONE(`$2') 
  • branches/1.3/run-xcachetest

    r604 r623  
    1919if test -z "$TEST_PHP_USER" ; then 
    2020    TEST_PHP_USER="$PHP_SRC/tests" 
    21     for i in Zend ZendEngine2 ext/standard/tests ext/reflection/tests ; do 
     21    for i in Zend ZendEngine2 ext/standard/tests ext/reflection/tests ext/spl/tests; do 
    2222        if test -d "$PHP_SRC/$i" ; then 
    2323            TEST_PHP_USER="$TEST_PHP_USER,$PHP_SRC/$i" 
  • branches/1.3/utils.c

    r622 r623  
    144144#ifdef ZEND_ENGINE_2_1 
    145145        switch (opline->opcode) { 
     146#ifdef ZEND_GOTO 
     147            case ZEND_GOTO: 
     148#endif 
    146149            case ZEND_JMP: 
    147150                opline->op1.u.opline_num = opline->op1.u.jmp_addr - op_array->opcodes; 
     
    194197#ifdef ZEND_ENGINE_2_1 
    195198        switch (opline->opcode) { 
     199#ifdef ZEND_GOTO 
     200            case ZEND_GOTO: 
     201#endif 
    196202            case ZEND_JMP: 
    197203                assert(opline->op1.u.opline_num < op_array->last); 
     
    294300    while (opline < end) { 
    295301        switch (opline->opcode) { 
     302#ifdef ZEND_GOTO 
     303            case ZEND_GOTO: 
     304#endif 
    296305            case ZEND_JMP: 
    297306                next = begin + opline->op1.u.opline_num; 
  • branches/1.3/utils.h

    r622 r623  
    8080typedef struct { 
    8181    int alloc; 
    82     int orig_user_error_handler_error_reporting; 
    8382    char *filename; 
    8483 
     
    9897    Bucket    *tmp_internal_function_tail; 
    9998    Bucket    *tmp_internal_class_tail; 
     99 
     100#ifdef E_STRICT 
     101    int orig_user_error_handler_error_reporting; 
     102#endif 
    100103} xc_sandbox_t; 
    101104 
  • branches/1.3/xcache-test.ini

    r622 r623  
    1 auto_globals_jit = Off 
    21memory_limit = 256M 
    32 
  • branches/1.3/xcache.c

    r622 r623  
    8787 
    8888static zend_bool xc_initized = 0; 
     89static time_t xc_init_time = 0; 
     90static long unsigned xc_init_instance_id = 0; 
     91#ifdef ZTS 
     92static long unsigned xc_init_instance_subid = 0; 
     93#endif 
    8994static zend_compile_file_t *origin_compile_file = NULL; 
    9095static zend_compile_file_t *old_compile_file = NULL; 
     
    247252/* }}} */ 
    248253#endif 
     254static inline zend_uint advance_wrapped(zend_uint val, zend_uint count) /* {{{ */ 
     255{ 
     256    if (val + 1 >= count) { 
     257        return 0; 
     258    } 
     259    return val + 1; 
     260} 
     261/* }}} */ 
     262static void xc_counters_inc(time_t *curtime, zend_uint *curslot, time_t period, zend_ulong *counters, zend_uint count TSRMLS_DC) /* {{{ */ 
     263{ 
     264    time_t n = XG(request_time) / period; 
     265    if (*curtime != n) { 
     266        zend_uint target_slot = n % count; 
     267        if (n - *curtime > period) { 
     268            memset(counters, 0, sizeof(counters[0]) * count); 
     269        } 
     270        else { 
     271            zend_uint slot; 
     272            for (slot = advance_wrapped(*curslot, count); 
     273                    slot != target_slot; 
     274                    slot = advance_wrapped(slot, count)) { 
     275                counters[slot] = 0; 
     276            } 
     277            counters[target_slot] = 0; 
     278        } 
     279        *curtime = n; 
     280        *curslot = target_slot; 
     281    } 
     282    counters[*curslot] ++; 
     283} 
     284/* }}} */ 
     285static void xc_cache_hit_dmz(xc_cache_t *cache TSRMLS_DC) /* {{{ */ 
     286{ 
     287    cache->hits ++; 
     288 
     289    xc_counters_inc(&cache->hits_by_hour_cur_time 
     290            , &cache->hits_by_hour_cur_slot, 60 * 60 
     291            , cache->hits_by_hour 
     292            , sizeof(cache->hits_by_hour) / sizeof(cache->hits_by_hour[0]) 
     293            TSRMLS_CC); 
     294 
     295    xc_counters_inc(&cache->hits_by_second_cur_time 
     296            , &cache->hits_by_second_cur_slot 
     297            , 1 
     298            , cache->hits_by_second 
     299            , sizeof(cache->hits_by_second) / sizeof(cache->hits_by_second[0]) 
     300            TSRMLS_CC); 
     301} 
     302/* }}} */ 
    249303 
    250304/* helper function that loop through each entry */ 
     
    311365    int i, c; 
    312366 
    313     if (!xc_php_ttl || !xc_php_gc_interval) { 
     367    if (!xc_php_ttl || !xc_php_gc_interval || !xc_php_caches) { 
    314368        return; 
    315369    } 
     
    324378    int i, c; 
    325379 
    326     if (!xc_var_gc_interval) { 
     380    if (!xc_var_gc_interval || !xc_var_caches) { 
    327381        return; 
    328382    } 
     
    372426    int i, c; 
    373427 
    374     for (i = 0, c = xc_php_hcache.size; i < c; i ++) { 
    375         xc_gc_deletes_one(xc_php_caches[i] TSRMLS_CC); 
    376     } 
    377  
    378     for (i = 0, c = xc_var_hcache.size; i < c; i ++) { 
    379         xc_gc_deletes_one(xc_var_caches[i] TSRMLS_CC); 
     428    if (xc_php_caches) { 
     429        for (i = 0, c = xc_php_hcache.size; i < c; i ++) { 
     430            xc_gc_deletes_one(xc_php_caches[i] TSRMLS_CC); 
     431        } 
     432    } 
     433 
     434    if (xc_var_caches) { 
     435        for (i = 0, c = xc_var_hcache.size; i < c; i ++) { 
     436            xc_gc_deletes_one(xc_var_caches[i] TSRMLS_CC); 
     437        } 
    380438    } 
    381439} 
     
    385443static void xc_fillinfo_dmz(int cachetype, xc_cache_t *cache, zval *return_value TSRMLS_DC) /* {{{ */ 
    386444{ 
    387     zval *blocks; 
     445    zval *blocks, *hits; 
     446    int i; 
    388447    const xc_block_t *b; 
    389448#ifndef NDEBUG 
     
    417476        add_assoc_null_ex(return_value, ZEND_STRS("gc")); 
    418477    } 
     478    MAKE_STD_ZVAL(hits); 
     479    array_init(hits); 
     480    for (i = 0; i < sizeof(cache->hits_by_hour) / sizeof(cache->hits_by_hour[0]); i ++) { 
     481        add_next_index_long(hits, (long) cache->hits_by_hour[i]); 
     482    } 
     483    add_assoc_zval_ex(return_value, ZEND_STRS("hits_by_hour"), hits); 
     484 
     485    MAKE_STD_ZVAL(hits); 
     486    array_init(hits); 
     487    for (i = 0; i < sizeof(cache->hits_by_second) / sizeof(cache->hits_by_second[0]); i ++) { 
     488        add_next_index_long(hits, (long) cache->hits_by_second[i]); 
     489    } 
     490    add_assoc_zval_ex(return_value, ZEND_STRS("hits_by_second"), hits); 
    419491 
    420492    MAKE_STD_ZVAL(blocks); 
     
    640712static void xc_entry_unholds(TSRMLS_D) /* {{{ */ 
    641713{ 
    642     xc_entry_unholds_real(XG(php_holds), xc_php_caches, xc_php_hcache.size TSRMLS_CC); 
    643     xc_entry_unholds_real(XG(var_holds), xc_var_caches, xc_var_hcache.size TSRMLS_CC); 
     714    if (xc_php_caches) { 
     715        xc_entry_unholds_real(XG(php_holds), xc_php_caches, xc_php_hcache.size TSRMLS_CC); 
     716    } 
     717 
     718    if (xc_var_caches) { 
     719        xc_entry_unholds_real(XG(var_holds), xc_var_caches, xc_var_hcache.size TSRMLS_CC); 
     720    } 
    644721} 
    645722/* }}} */ 
     
    914991            TRACE("found %s, catch it", stored_xce->name.str.val); 
    915992            xc_entry_hold_php_dmz(stored_xce TSRMLS_CC); 
    916             cache->hits ++; 
     993            xc_cache_hit_dmz(cache); 
    917994            break; 
    918995        } 
     
    12221299    xc_shm_t *shm; 
    12231300    int i; 
    1224     if (!xc_initized) { 
    1225         return 0; 
    1226     } 
    1227     for (i = 0; i < xc_php_hcache.size; i ++) { 
    1228         shm = xc_php_caches[i]->shm; 
    1229         if (shm->handlers->is_readwrite(shm, p)) { 
    1230             return 1; 
    1231         } 
    1232     } 
    1233     for (i = 0; i < xc_var_hcache.size; i ++) { 
    1234         shm = xc_var_caches[i]->shm; 
    1235         if (shm->handlers->is_readwrite(shm, p)) { 
    1236             return 1; 
     1301 
     1302    if (xc_php_caches) { 
     1303        for (i = 0; i < xc_php_hcache.size; i ++) { 
     1304            shm = xc_php_caches[i]->shm; 
     1305            if (shm->handlers->is_readwrite(shm, p)) { 
     1306                return 1; 
     1307            } 
     1308        } 
     1309    } 
     1310 
     1311    if (xc_var_caches) { 
     1312        for (i = 0; i < xc_var_hcache.size; i ++) { 
     1313            shm = xc_var_caches[i]->shm; 
     1314            if (shm->handlers->is_readwrite(shm, p)) { 
     1315                return 1; 
     1316            } 
    12371317        } 
    12381318    } 
     
    12441324    xc_shm_t *shm; 
    12451325    int i; 
    1246     if (!xc_initized) { 
    1247         return 0; 
    1248     } 
    1249     for (i = 0; i < xc_php_hcache.size; i ++) { 
    1250         shm = xc_php_caches[i]->shm; 
    1251         if (shm->handlers->is_readonly(shm, p)) { 
    1252             return 1; 
    1253         } 
    1254     } 
    1255     for (i = 0; i < xc_var_hcache.size; i ++) { 
    1256         shm = xc_var_caches[i]->shm; 
    1257         if (shm->handlers->is_readonly(shm, p)) { 
    1258             return 1; 
     1326 
     1327    if (xc_php_caches) { 
     1328        for (i = 0; i < xc_php_hcache.size; i ++) { 
     1329            shm = xc_php_caches[i]->shm; 
     1330            if (shm->handlers->is_readonly(shm, p)) { 
     1331                return 1; 
     1332            } 
     1333        } 
     1334    } 
     1335 
     1336    if (xc_var_caches) { 
     1337        for (i = 0; i < xc_var_hcache.size; i ++) { 
     1338            shm = xc_var_caches[i]->shm; 
     1339            if (shm->handlers->is_readonly(shm, p)) { 
     1340                return 1; 
     1341            } 
    12591342        } 
    12601343    } 
     
    15151598        XG(internal_table_copied) = 1; 
    15161599    } 
    1517     if (xc_php_hcache.size && !XG(php_holds)) { 
     1600    if (xc_php_caches && !XG(php_holds)) { 
    15181601        XG(php_holds) = calloc(xc_php_hcache.size, sizeof(xc_stack_t)); 
    15191602        for (i = 0; i < xc_php_hcache.size; i ++) { 
     
    15221605    } 
    15231606 
    1524     if (xc_initized && xc_var_hcache.size && !XG(var_holds)) { 
     1607    if (xc_var_caches && !XG(var_holds)) { 
    15251608        XG(var_holds) = calloc(xc_var_hcache.size, sizeof(xc_stack_t)); 
    15261609        for (i = 0; i < xc_var_hcache.size; i ++) { 
     
    16751758    } 
    16761759 
    1677 #define STR "WWW-authenticate: Basic Realm=\"XCache Administration\"" 
     1760#define STR "HTTP/1.0 401 Unauthorized" 
    16781761    sapi_add_header_ex(STR, sizeof(STR) - 1, 1, 1 TSRMLS_CC); 
    16791762#undef STR 
    1680 #define STR "HTTP/1.0 401 Unauthorized" 
     1763#define STR "WWW-authenticate: Basic Realm=\"XCache Administration\"" 
    16811764    sapi_add_header_ex(STR, sizeof(STR) - 1, 1, 1 TSRMLS_CC); 
    16821765#undef STR 
     
    18841967    } LEAVE_LOCK(xce.cache); 
    18851968    if (found) { 
    1886         xce.cache->hits ++; 
     1969        xc_cache_hit_dmz(xce.cache TSRMLS_CC); 
    18871970    } 
    18881971    else { 
     
    19652048    } LEAVE_LOCK(xce.cache); 
    19662049    if (found) { 
    1967         xce.cache->hits ++; 
     2050        xc_cache_hit_dmz(xce.cache TSRMLS_CC); 
    19682051    } 
    19692052    else { 
     
    20982181} 
    20992182/* }}} */ 
     2183#ifdef HAVE_XCACHE_DPRINT 
     2184/* {{{ proto bool  xcache_dprint(mixed value) 
     2185   Prints variable (or value) internal struct (debug only) */ 
     2186PHP_FUNCTION(xcache_dprint) 
     2187{ 
     2188    zval *value; 
     2189 
     2190    if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "z", &value) == FAILURE) { 
     2191        return; 
     2192    } 
     2193    xc_dprint_zval(value, 0 TSRMLS_CC); 
     2194} 
     2195/* }}} */ 
     2196#endif 
    21002197/* {{{ proto string xcache_asm(string filename) 
    21012198 */ 
     
    23232420    PHP_FE(xcache_isset,             NULL) 
    23242421    PHP_FE(xcache_unset,             NULL) 
     2422#ifdef HAVE_XCACHE_DPRINT 
     2423    PHP_FE(xcache_dprint,            NULL) 
     2424#endif 
    23252425    {NULL, NULL,                     NULL} 
    23262426}; 
     
    24602560    php_info_print_table_row(2, "Modules Built", XCACHE_MODULES); 
    24612561    php_info_print_table_row(2, "Readonly Protection", xc_readonly_protection ? "enabled" : "N/A"); 
     2562    ptr = php_format_date("Y-m-d H:i:s", sizeof("Y-m-d H:i:s") - 1, xc_init_time, 1 TSRMLS_CC); 
     2563    php_info_print_table_row(2, "Cache Init Time", ptr); 
     2564    efree(ptr); 
     2565 
     2566#ifdef ZTS 
     2567    snprintf(buf, sizeof(buf), "%lu.%lu", xc_init_instance_id, xc_init_instance_subid); 
     2568#else 
     2569    snprintf(buf, sizeof(buf), "%lu", xc_init_instance_id); 
     2570#endif 
     2571    php_info_print_table_row(2, "Cache Instance Id", buf); 
    24622572 
    24632573    if (xc_php_size) { 
     
    26942804        } 
    26952805        xc_initized = 1; 
     2806        xc_init_time = time(NULL); 
     2807        xc_init_instance_id = getpid(); 
     2808#ifdef ZTS 
     2809        xc_init_instance_subid = tsrm_thread_id(); 
     2810#endif 
    26962811    } 
    26972812 
  • branches/1.3/xcache.h

    r622 r623  
    220220    time_t     last_gc_deletes; 
    221221    time_t     last_gc_expires; 
     222 
     223    time_t     hits_by_hour_cur_time; 
     224    zend_uint  hits_by_hour_cur_slot; 
     225    zend_ulong hits_by_hour[24]; 
     226    time_t     hits_by_second_cur_time; 
     227    zend_uint  hits_by_second_cur_slot; 
     228    zend_ulong hits_by_second[5]; 
    222229} xc_cache_t; 
    223230/* }}} */ 
  • branches/1.3/xcache.ini

    r604 r623  
    2323; to disable: xcache.size=0 
    2424; to enable : xcache.size=64M etc (any size > 0) and your system mmap allows 
    25 xcache.size  =                0M 
     25xcache.size  =               60M 
    2626; set to cpu count (cat /proc/cpuinfo |grep -c processor) 
    2727xcache.count =                 1 
     
    3434 
    3535; same as aboves but for variable cache 
    36 xcache.var_size  =            0M 
     36xcache.var_size  =            4M 
    3737xcache.var_count =             1 
    3838xcache.var_slots =            8K 
Note: See TracChangeset for help on using the changeset viewer.