Skip to content
Snippets Groups Projects
Commit a33af38f authored by jurgenhaas's avatar jurgenhaas
Browse files

#7 Update apc.php for PHP 7 and APCu

parent d13b1aab
No related branches found
No related tags found
No related merge requests found
...@@ -22,7 +22,7 @@ ...@@ -22,7 +22,7 @@
*/ */
$VERSION='$Id: apc.php 307048 2011-01-03 23:53:17Z kalle $'; $VERSION='$Id$';
////////// READ OPTIONAL CONFIGURATION FILE //////////// ////////// READ OPTIONAL CONFIGURATION FILE ////////////
if (file_exists("apc.conf.php")) include("apc.conf.php"); if (file_exists("apc.conf.php")) include("apc.conf.php");
...@@ -30,10 +30,10 @@ if (file_exists("apc.conf.php")) include("apc.conf.php"); ...@@ -30,10 +30,10 @@ if (file_exists("apc.conf.php")) include("apc.conf.php");
////////// BEGIN OF DEFAULT CONFIG AREA /////////////////////////////////////////////////////////// ////////// BEGIN OF DEFAULT CONFIG AREA ///////////////////////////////////////////////////////////
defaults('USE_AUTHENTICATION',1); // Use (internal) authentication - best choice if defaults('USE_AUTHENTICATION',1); // Use (internal) authentication - best choice if
// no other authentication is available // no other authentication is available
// If set to 0: // If set to 0:
// There will be no further authentication. You // There will be no further authentication. You
// will have to handle this by yourself! // will have to handle this by yourself!
// If set to 1: // If set to 1:
// You need to change ADMIN_PASSWORD to make // You need to change ADMIN_PASSWORD to make
...@@ -41,7 +41,7 @@ defaults('USE_AUTHENTICATION',1); // Use (internal) authentication - best choi ...@@ -41,7 +41,7 @@ defaults('USE_AUTHENTICATION',1); // Use (internal) authentication - best choi
defaults('ADMIN_USERNAME','apc'); // Admin Username defaults('ADMIN_USERNAME','apc'); // Admin Username
defaults('ADMIN_PASSWORD','password'); // Admin Password - CHANGE THIS TO ENABLE!!! defaults('ADMIN_PASSWORD','password'); // Admin Password - CHANGE THIS TO ENABLE!!!
// (beckerr) I'm using a clear text password here, because I've no good idea how to let // (beckerr) I'm using a clear text password here, because I've no good idea how to let
// users generate a md5 or crypt password in a easy way to fill it in above // users generate a md5 or crypt password in a easy way to fill it in above
//defaults('DATE_FORMAT', "d.m.Y H:i:s"); // German //defaults('DATE_FORMAT', "d.m.Y H:i:s"); // German
...@@ -71,10 +71,8 @@ if (isset($_SERVER['SERVER_ADDR'])) { ...@@ -71,10 +71,8 @@ if (isset($_SERVER['SERVER_ADDR'])) {
// operation constants // operation constants
define('OB_HOST_STATS',1); define('OB_HOST_STATS',1);
define('OB_SYS_CACHE',2); define('OB_USER_CACHE',2);
define('OB_USER_CACHE',3); define('OB_VERSION_CHECK',3);
define('OB_SYS_CACHE_DIR',4);
define('OB_VERSION_CHECK',9);
// check validity of input variables // check validity of input variables
$vardom=array( $vardom=array(
...@@ -91,12 +89,9 @@ $vardom=array( ...@@ -91,12 +89,9 @@ $vardom=array(
'SORT1' => '/^[AHSMCDTZ]$/', // first sort key 'SORT1' => '/^[AHSMCDTZ]$/', // first sort key
'SORT2' => '/^[DA]$/', // second sort key 'SORT2' => '/^[DA]$/', // second sort key
'AGGR' => '/^\d+$/', // aggregation by dir level 'AGGR' => '/^\d+$/', // aggregation by dir level
'SEARCH' => '~^[a-zA-Z0-1/_.-]*$~' // aggregation by dir level 'SEARCH' => '~^[a-zA-Z0-9/_.-]*$~' // aggregation by dir level
); );
// default cache mode
$cache_mode='opcode';
// cache scope // cache scope
$scope_list=array( $scope_list=array(
'A' => 'cache_list', 'A' => 'cache_list',
...@@ -169,34 +164,30 @@ if (!USE_AUTHENTICATION) { ...@@ -169,34 +164,30 @@ if (!USE_AUTHENTICATION) {
</body></html> </body></html>
EOB; EOB;
exit; exit;
} else { } else {
$AUTHENTICATED=1; $AUTHENTICATED=1;
} }
} }
} }
// select cache mode
if ($AUTHENTICATED && $MYREQUEST['OB'] == OB_USER_CACHE) {
$cache_mode='user';
}
// clear cache // clear cache
if ($AUTHENTICATED && isset($MYREQUEST['CC']) && $MYREQUEST['CC']) { if ($AUTHENTICATED && isset($MYREQUEST['CC']) && $MYREQUEST['CC']) {
apc_clear_cache($cache_mode); apcu_clear_cache();
} }
if ($AUTHENTICATED && !empty($MYREQUEST['DU'])) { if ($AUTHENTICATED && !empty($MYREQUEST['DU'])) {
apc_delete($MYREQUEST['DU']); apcu_delete($MYREQUEST['DU']);
} }
if(!function_exists('apc_cache_info') || !($cache=@apc_cache_info($cache_mode))) { if(!function_exists('apcu_cache_info')) {
echo "No cache info available. APC does not appear to be running."; echo "No cache info available. APC does not appear to be running.";
exit; exit;
} }
$cache_user = apc_cache_info('user', 1); $cache = apcu_cache_info();
$mem=apc_sma_info();
if(!$cache['num_hits']) { $cache['num_hits']=1; $time++; } // Avoid division by 0 errors on a cache clear $mem=apcu_sma_info();
// don't cache this page // don't cache this page
// //
...@@ -241,7 +232,7 @@ if (isset($MYREQUEST['IMG'])) ...@@ -241,7 +232,7 @@ if (isset($MYREQUEST['IMG']))
$r=$diameter/2; $r=$diameter/2;
$w=deg2rad((360+$start+($end-$start)/2)%360); $w=deg2rad((360+$start+($end-$start)/2)%360);
if (function_exists("imagefilledarc")) { if (function_exists("imagefilledarc")) {
// exists only if GD 2.0.1 is avaliable // exists only if GD 2.0.1 is avaliable
imagefilledarc($im, $centerX+1, $centerY+1, $diameter, $diameter, $start, $end, $color1, IMG_ARC_PIE); imagefilledarc($im, $centerX+1, $centerY+1, $diameter, $diameter, $start, $end, $color1, IMG_ARC_PIE);
...@@ -258,13 +249,13 @@ if (isset($MYREQUEST['IMG'])) ...@@ -258,13 +249,13 @@ if (isset($MYREQUEST['IMG']))
if ($text) { if ($text) {
if ($placeindex>0) { if ($placeindex>0) {
imageline($im,$centerX + $r*cos($w)/2, $centerY + $r*sin($w)/2,$diameter, $placeindex*12,$color1); imageline($im,$centerX + $r*cos($w)/2, $centerY + $r*sin($w)/2,$diameter, $placeindex*12,$color1);
imagestring($im,4,$diameter, $placeindex*12,$text,$color1); imagestring($im,4,$diameter, $placeindex*12,$text,$color1);
} else { } else {
imagestring($im,4,$centerX + $r*cos($w)/2, $centerY + $r*sin($w)/2,$text,$color1); imagestring($im,4,$centerX + $r*cos($w)/2, $centerY + $r*sin($w)/2,$text,$color1);
} }
} }
} }
function text_arc($im, $centerX, $centerY, $diameter, $start, $end, $color1,$text,$placeindex=0) { function text_arc($im, $centerX, $centerY, $diameter, $start, $end, $color1,$text,$placeindex=0) {
$r=$diameter/2; $r=$diameter/2;
...@@ -272,13 +263,13 @@ if (isset($MYREQUEST['IMG'])) ...@@ -272,13 +263,13 @@ if (isset($MYREQUEST['IMG']))
if ($placeindex>0) { if ($placeindex>0) {
imageline($im,$centerX + $r*cos($w)/2, $centerY + $r*sin($w)/2,$diameter, $placeindex*12,$color1); imageline($im,$centerX + $r*cos($w)/2, $centerY + $r*sin($w)/2,$diameter, $placeindex*12,$color1);
imagestring($im,4,$diameter, $placeindex*12,$text,$color1); imagestring($im,4,$diameter, $placeindex*12,$text,$color1);
} else { } else {
imagestring($im,4,$centerX + $r*cos($w)/2, $centerY + $r*sin($w)/2,$text,$color1); imagestring($im,4,$centerX + $r*cos($w)/2, $centerY + $r*sin($w)/2,$text,$color1);
} }
} }
function fill_box($im, $x, $y, $w, $h, $color1, $color2,$text='',$placeindex='') { function fill_box($im, $x, $y, $w, $h, $color1, $color2,$text='',$placeindex='') {
global $col_black; global $col_black;
$x1=$x+$w-1; $x1=$x+$w-1;
...@@ -290,15 +281,15 @@ if (isset($MYREQUEST['IMG'])) ...@@ -290,15 +281,15 @@ if (isset($MYREQUEST['IMG']))
imagerectangle($im, $x, $y1, $x1, $y, $color1); imagerectangle($im, $x, $y1, $x1, $y, $color1);
if ($text) { if ($text) {
if ($placeindex>0) { if ($placeindex>0) {
if ($placeindex<16) if ($placeindex<16)
{ {
$px=5; $px=5;
$py=$placeindex*12+6; $py=$placeindex*12+6;
imagefilledrectangle($im, $px+90, $py+3, $px+90-4, $py-3, $color2); imagefilledrectangle($im, $px+90, $py+3, $px+90-4, $py-3, $color2);
imageline($im,$x,$y+$h/2,$px+90,$py,$color2); imageline($im,$x,$y+$h/2,$px+90,$py,$color2);
imagestring($im,2,$px,$py-6,$text,$color1); imagestring($im,2,$px,$py-6,$text,$color1);
} else { } else {
if ($placeindex<31) { if ($placeindex<31) {
$px=$x+40*2; $px=$x+40*2;
...@@ -309,7 +300,7 @@ if (isset($MYREQUEST['IMG'])) ...@@ -309,7 +300,7 @@ if (isset($MYREQUEST['IMG']))
} }
imagefilledrectangle($im, $px, $py+3, $px-4, $py-3, $color2); imagefilledrectangle($im, $px, $py+3, $px-4, $py-3, $color2);
imageline($im,$x+$w,$y+$h/2,$px,$py,$color2); imageline($im,$x+$w,$y+$h/2,$px,$py,$color2);
imagestring($im,2,$px+2,$py-6,$text,$color1); imagestring($im,2,$px+2,$py-6,$text,$color1);
} }
} else { } else {
imagestring($im,4,$x+5,$y1-16,$text,$color1); imagestring($im,4,$x+5,$y1-16,$text,$color1);
...@@ -331,7 +322,7 @@ if (isset($MYREQUEST['IMG'])) ...@@ -331,7 +322,7 @@ if (isset($MYREQUEST['IMG']))
imagecolortransparent($image,$col_white); imagecolortransparent($image,$col_white);
switch ($MYREQUEST['IMG']) { switch ($MYREQUEST['IMG']) {
case 1: case 1:
$s=$mem['num_seg']*$mem['seg_size']; $s=$mem['num_seg']*$mem['seg_size'];
$a=$mem['avail_mem']; $a=$mem['avail_mem'];
...@@ -342,7 +333,7 @@ if (isset($MYREQUEST['IMG'])) ...@@ -342,7 +333,7 @@ if (isset($MYREQUEST['IMG']))
// would expect because we try to visualize any memory fragmentation as well. // would expect because we try to visualize any memory fragmentation as well.
$angle_from = 0; $angle_from = 0;
$string_placement=array(); $string_placement=array();
for($i=0; $i<$mem['num_seg']; $i++) { for($i=0; $i<$mem['num_seg']; $i++) {
$ptr = 0; $ptr = 0;
$free = $mem['block_lists'][$i]; $free = $mem['block_lists'][$i];
uasort($free, 'block_sort'); uasort($free, 'block_sort');
...@@ -369,7 +360,7 @@ if (isset($MYREQUEST['IMG'])) ...@@ -369,7 +360,7 @@ if (isset($MYREQUEST['IMG']))
$angle_from = $angle_to; $angle_from = $angle_to;
$ptr = $block['offset']+$block['size']; $ptr = $block['offset']+$block['size'];
} }
if ($ptr < $mem['seg_size']) { // memory at the end if ($ptr < $mem['seg_size']) { // memory at the end
$angle_to = $angle_from + ($mem['seg_size'] - $ptr)/$s; $angle_to = $angle_from + ($mem['seg_size'] - $ptr)/$s;
if(($angle_to+$fuzz)>1) $angle_to = 1; if(($angle_to+$fuzz)>1) $angle_to = 1;
fill_arc($image,$x,$y,$size,$angle_from*360,$angle_to*360,$col_black,$col_red); fill_arc($image,$x,$y,$size,$angle_from*360,$angle_to*360,$col_black,$col_red);
...@@ -382,15 +373,15 @@ if (isset($MYREQUEST['IMG'])) ...@@ -382,15 +373,15 @@ if (isset($MYREQUEST['IMG']))
text_arc($image,$x,$y,$size,$angle[0]*360,$angle[1]*360,$col_black,bsize($s*($angle[1]-$angle[0]))); text_arc($image,$x,$y,$size,$angle[0]*360,$angle[1]*360,$col_black,bsize($s*($angle[1]-$angle[0])));
} }
break; break;
case 2: case 2:
$s=$cache['num_hits']+$cache['num_misses']; $s=$cache['num_hits']+$cache['num_misses'];
$a=$cache['num_hits']; $a=$cache['num_hits'];
fill_box($image, 30,$size,50,-$a*($size-21)/$s,$col_black,$col_green,sprintf("%.1f%%",$cache['num_hits']*100/$s)); fill_box($image, 30,$size,50,$s ? (-$a*($size-21)/$s) : 0,$col_black,$col_green,sprintf("%.1f%%",$s ? $cache['num_hits']*100/$s : 0));
fill_box($image,130,$size,50,-max(4,($s-$a)*($size-21)/$s),$col_black,$col_red,sprintf("%.1f%%",$cache['num_misses']*100/$s)); fill_box($image,130,$size,50,$s ? -max(4,($s-$a)*($size-21)/$s) : 0,$col_black,$col_red,sprintf("%.1f%%",$s ? $cache['num_misses']*100/$s : 0));
break; break;
case 3: case 3:
$s=$mem['num_seg']*$mem['seg_size']; $s=$mem['num_seg']*$mem['seg_size'];
$a=$mem['avail_mem']; $a=$mem['avail_mem'];
...@@ -400,7 +391,7 @@ if (isset($MYREQUEST['IMG'])) ...@@ -400,7 +391,7 @@ if (isset($MYREQUEST['IMG']))
// This block of code creates the bar chart. It is a lot more complex than you // This block of code creates the bar chart. It is a lot more complex than you
// would expect because we try to visualize any memory fragmentation as well. // would expect because we try to visualize any memory fragmentation as well.
for($i=0; $i<$mem['num_seg']; $i++) { for($i=0; $i<$mem['num_seg']; $i++) {
$ptr = 0; $ptr = 0;
$free = $mem['block_lists'][$i]; $free = $mem['block_lists'][$i];
uasort($free, 'block_sort'); uasort($free, 'block_sort');
...@@ -423,7 +414,7 @@ if (isset($MYREQUEST['IMG'])) ...@@ -423,7 +414,7 @@ if (isset($MYREQUEST['IMG']))
$y+=$h; $y+=$h;
$ptr = $block['offset']+$block['size']; $ptr = $block['offset']+$block['size'];
} }
if ($ptr < $mem['seg_size']) { // memory at the end if ($ptr < $mem['seg_size']) { // memory at the end
$h = (GRAPH_SIZE-5) * ($mem['seg_size'] - $ptr) / $s; $h = (GRAPH_SIZE-5) * ($mem['seg_size'] - $ptr) / $s;
if ($h > 0) { if ($h > 0) {
fill_box($image,$x,$y,50,$h,$col_black,$col_red,bsize($mem['seg_size']-$ptr),$j++); fill_box($image,$x,$y,50,$h,$col_black,$col_red,bsize($mem['seg_size']-$ptr),$j++);
...@@ -431,15 +422,16 @@ if (isset($MYREQUEST['IMG'])) ...@@ -431,15 +422,16 @@ if (isset($MYREQUEST['IMG']))
} }
} }
break; break;
case 4:
$s=$cache['num_hits']+$cache['num_misses']; case 4:
$a=$cache['num_hits']; $s=$cache['num_hits']+$cache['num_misses'];
$a=$cache['num_hits'];
fill_box($image, 30,$size,50,-$a*($size-21)/$s,$col_black,$col_green,sprintf("%.1f%%",$cache['num_hits']*100/$s));
fill_box($image,130,$size,50,-max(4,($s-$a)*($size-21)/$s),$col_black,$col_red,sprintf("%.1f%%",$cache['num_misses']*100/$s)); fill_box($image, 30,$size,50,$s ? -$a*($size-21)/$s : 0,$col_black,$col_green,sprintf("%.1f%%", $s ? $cache['num_hits']*100/$s : 0));
fill_box($image,130,$size,50,$s ? -max(4,($s-$a)*($size-21)/$s) : 0,$col_black,$col_red,sprintf("%.1f%%", $s ? $cache['num_misses']*100/$s : 0));
break; break;
} }
header("Content-type: image/png"); header("Content-type: image/png");
imagepng($image); imagepng($image);
exit; exit;
...@@ -458,7 +450,7 @@ function bsize($s) { ...@@ -458,7 +450,7 @@ function bsize($s) {
// sortable table header in "scripts for this host" view // sortable table header in "scripts for this host" view
function sortheader($key,$name,$extra='') { function sortheader($key,$name,$extra='') {
global $MYREQUEST, $MY_SELF_WO_SORT; global $MYREQUEST, $MY_SELF_WO_SORT;
if ($MYREQUEST['SORT1']==$key) { if ($MYREQUEST['SORT1']==$key) {
$MYREQUEST['SORT2'] = $MYREQUEST['SORT2']=='A' ? 'D' : 'A'; $MYREQUEST['SORT2'] = $MYREQUEST['SORT2']=='A' ? 'D' : 'A';
} }
...@@ -466,7 +458,7 @@ function sortheader($key,$name,$extra='') { ...@@ -466,7 +458,7 @@ function sortheader($key,$name,$extra='') {
} }
// create menu entry // create menu entry
function menu_entry($ob,$title) { function menu_entry($ob,$title) {
global $MYREQUEST,$MY_SELF; global $MYREQUEST,$MY_SELF;
if ($MYREQUEST['OB']!=$ob) { if ($MYREQUEST['OB']!=$ob) {
...@@ -474,7 +466,7 @@ function menu_entry($ob,$title) { ...@@ -474,7 +466,7 @@ function menu_entry($ob,$title) {
} else if (empty($MYREQUEST['SH'])) { } else if (empty($MYREQUEST['SH'])) {
return "<li><span class=active>$title</span></li>"; return "<li><span class=active>$title</span></li>";
} else { } else {
return "<li><a class=\"child_active\" href=\"$MY_SELF&OB=$ob\">$title</a></li>"; return "<li><a class=\"child_active\" href=\"$MY_SELF&OB=$ob\">$title</a></li>";
} }
} }
...@@ -514,7 +506,7 @@ function block_sort($array1, $array2) ...@@ -514,7 +506,7 @@ function block_sort($array1, $array2)
?> ?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html> <html>
<head><title>APC INFO <?php echo $host ?></title> <head><title>APCu INFO <?php echo $host ?></title>
<style><!-- <style><!--
body { background:white; font-size:100.01%; margin:0; padding:0; } body { background:white; font-size:100.01%; margin:0; padding:0; }
body,p,td,th,input,submit { font-size:0.8em;font-family:arial,helvetica,sans-serif; } body,p,td,th,input,submit { font-size:0.8em;font-family:arial,helvetica,sans-serif; }
...@@ -626,8 +618,8 @@ ol.menu a:hover { ...@@ -626,8 +618,8 @@ ol.menu a:hover {
background:rgb(193,193,244); background:rgb(193,193,244);
text-decoration:none; text-decoration:none;
} }
div.info { div.info {
background:rgb(204,204,204); background:rgb(204,204,204);
border:solid rgb(204,204,204) 1px; border:solid rgb(204,204,204) 1px;
...@@ -700,7 +692,7 @@ div.authneeded { ...@@ -700,7 +692,7 @@ div.authneeded {
padding:2em; padding:2em;
text-align:center; text-align:center;
} }
input { input {
background:rgb(153,153,204); background:rgb(153,153,204);
border:solid rgb(102,102,153) 2px; border:solid rgb(102,102,153) 2px;
...@@ -715,35 +707,29 @@ input { ...@@ -715,35 +707,29 @@ input {
<body> <body>
<div class="head"> <div class="head">
<h1 class="apc"> <h1 class="apc">
<div class="logo"><span class="logo"><a href="http://pecl.php.net/package/APC">APC</a></span></div> <div class="logo"><span class="logo"><a href="http://pecl.php.net/package/APCu">APCu</a></span></div>
<div class="nameinfo">Opcode Cache</div> <div class="nameinfo">User Cache</div>
</h1> </h1>
<div class="login"> <div class="login">
<?php put_login_link(); ?> <?php put_login_link(); ?>
</div> </div>
<hr class="apc"> <hr class="apc">
</div> </div>
<?php
<?php
// Display main Menu // Display main Menu
echo <<<EOB echo <<<EOB
<ol class=menu> <ol class=menu>
<li><a href="$MY_SELF&OB={$MYREQUEST['OB']}&SH={$MYREQUEST['SH']}">Refresh Data</a></li> <li><a href="$MY_SELF&OB={$MYREQUEST['OB']}&SH={$MYREQUEST['SH']}">Refresh Data</a></li>
EOB; EOB;
echo echo
menu_entry(1,'View Host Stats'), menu_entry(OB_HOST_STATS,'View Host Stats'),
menu_entry(2,'System Cache Entries'); menu_entry(OB_USER_CACHE,'User Cache Entries'),
if ($AUTHENTICATED) { menu_entry(OB_VERSION_CHECK,'Version Check');
echo menu_entry(4,'Per-Directory Entries');
}
echo
menu_entry(3,'User Cache Entries'),
menu_entry(9,'Version Check');
if ($AUTHENTICATED) { if ($AUTHENTICATED) {
echo <<<EOB echo <<<EOB
<li><a class="aright" href="$MY_SELF&CC=1&OB={$MYREQUEST['OB']}" onClick="javascript:return confirm('Are you sure?');">Clear $cache_mode Cache</a></li> <li><a class="aright" href="$MY_SELF&CC=1&OB={$MYREQUEST['OB']}" onClick="javascript:return confirm('Are you sure?');">Clear Cache</a></li>
EOB; EOB;
} }
echo <<<EOB echo <<<EOB
...@@ -756,14 +742,9 @@ echo <<<EOB ...@@ -756,14 +742,9 @@ echo <<<EOB
<div class=content> <div class=content>
EOB; EOB;
// MAIN SWITCH STATEMENT // MAIN SWITCH STATEMENT
switch ($MYREQUEST['OB']) { switch ($MYREQUEST['OB']) {
// ----------------------------------------------- // -----------------------------------------------
// Host Stats // Host Stats
// ----------------------------------------------- // -----------------------------------------------
...@@ -772,77 +753,58 @@ case OB_HOST_STATS: ...@@ -772,77 +753,58 @@ case OB_HOST_STATS:
$mem_avail= $mem['avail_mem']; $mem_avail= $mem['avail_mem'];
$mem_used = $mem_size-$mem_avail; $mem_used = $mem_size-$mem_avail;
$seg_size = bsize($mem['seg_size']); $seg_size = bsize($mem['seg_size']);
$req_rate = sprintf("%.2f",($cache['num_hits']+$cache['num_misses'])/($time-$cache['start_time'])); $req_rate_user = sprintf("%.2f", $cache['num_hits'] ? (($cache['num_hits']+$cache['num_misses'])/($time-$cache['start_time'])) : 0);
$hit_rate = sprintf("%.2f",($cache['num_hits'])/($time-$cache['start_time'])); $hit_rate_user = sprintf("%.2f", $cache['num_hits'] ? (($cache['num_hits'])/($time-$cache['start_time'])) : 0);
$miss_rate = sprintf("%.2f",($cache['num_misses'])/($time-$cache['start_time'])); $miss_rate_user = sprintf("%.2f", $cache['num_misses'] ? (($cache['num_misses'])/($time-$cache['start_time'])) : 0);
$insert_rate = sprintf("%.2f",($cache['num_inserts'])/($time-$cache['start_time'])); $insert_rate_user = sprintf("%.2f", $cache['num_inserts'] ? (($cache['num_inserts'])/($time-$cache['start_time'])) : 0);
$req_rate_user = sprintf("%.2f",($cache_user['num_hits']+$cache_user['num_misses'])/($time-$cache_user['start_time'])); $apcversion = phpversion('apcu');
$hit_rate_user = sprintf("%.2f",($cache_user['num_hits'])/($time-$cache_user['start_time']));
$miss_rate_user = sprintf("%.2f",($cache_user['num_misses'])/($time-$cache_user['start_time']));
$insert_rate_user = sprintf("%.2f",($cache_user['num_inserts'])/($time-$cache_user['start_time']));
$apcversion = phpversion('apc');
$phpversion = phpversion(); $phpversion = phpversion();
$number_files = $cache['num_entries']; $number_vars = $cache['num_entries'];
$size_files = bsize($cache['mem_size']); $size_vars = bsize($cache['mem_size']);
$number_vars = $cache_user['num_entries'];
$size_vars = bsize($cache_user['mem_size']);
$i=0; $i=0;
echo <<< EOB echo <<< EOB
<div class="info div1"><h2>General Cache Information</h2> <div class="info div1"><h2>General Cache Information</h2>
<table cellspacing=0><tbody> <table cellspacing=0><tbody>
<tr class=tr-0><td class=td-0>APC Version</td><td>$apcversion</td></tr> <tr class=tr-0><td class=td-0>APCu Version</td><td>$apcversion</td></tr>
<tr class=tr-1><td class=td-0>PHP Version</td><td>$phpversion</td></tr> <tr class=tr-1><td class=td-0>PHP Version</td><td>$phpversion</td></tr>
EOB; EOB;
if(!empty($_SERVER['SERVER_NAME'])) if(!empty($_SERVER['SERVER_NAME']))
echo "<tr class=tr-0><td class=td-0>APC Host</td><td>{$_SERVER['SERVER_NAME']} $host</td></tr>\n"; echo "<tr class=tr-0><td class=td-0>APCu Host</td><td>{$_SERVER['SERVER_NAME']} $host</td></tr>\n";
if(!empty($_SERVER['SERVER_SOFTWARE'])) if(!empty($_SERVER['SERVER_SOFTWARE']))
echo "<tr class=tr-1><td class=td-0>Server Software</td><td>{$_SERVER['SERVER_SOFTWARE']}</td></tr>\n"; echo "<tr class=tr-1><td class=td-0>Server Software</td><td>{$_SERVER['SERVER_SOFTWARE']}</td></tr>\n";
echo <<<EOB echo <<<EOB
<tr class=tr-0><td class=td-0>Shared Memory</td><td>{$mem['num_seg']} Segment(s) with $seg_size <tr class=tr-0><td class=td-0>Shared Memory</td><td>{$mem['num_seg']} Segment(s) with $seg_size
<br/> ({$cache['memory_type']} memory, {$cache['locking_type']} locking) <br/> ({$cache['memory_type']} memory)
</td></tr> </td></tr>
EOB; EOB;
echo '<tr class=tr-1><td class=td-0>Start Time</td><td>',date(DATE_FORMAT,$cache['start_time']),'</td></tr>'; echo '<tr class=tr-1><td class=td-0>Start Time</td><td>',date(DATE_FORMAT,$cache['start_time']),'</td></tr>';
echo '<tr class=tr-0><td class=td-0>Uptime</td><td>',duration($cache['start_time']),'</td></tr>'; echo '<tr class=tr-0><td class=td-0>Uptime</td><td>',duration($cache['start_time']),'</td></tr>';
echo '<tr class=tr-1><td class=td-0>File Upload Support</td><td>',$cache['file_upload_progress'],'</td></tr>';
echo <<<EOB echo <<<EOB
</tbody></table> </tbody></table>
</div> </div>
<div class="info div1"><h2>File Cache Information</h2> <div class="info div1"><h2>Cache Information</h2>
<table cellspacing=0><tbody> <table cellspacing=0>
<tr class=tr-0><td class=td-0>Cached Files</td><td>$number_files ($size_files)</td></tr> <tbody>
<tr class=tr-1><td class=td-0>Hits</td><td>{$cache['num_hits']}</td></tr> <tr class=tr-0><td class=td-0>Cached Variables</td><td>$number_vars ($size_vars)</td></tr>
<tr class=tr-0><td class=td-0>Misses</td><td>{$cache['num_misses']}</td></tr> <tr class=tr-1><td class=td-0>Hits</td><td>{$cache['num_hits']}</td></tr>
<tr class=tr-1><td class=td-0>Request Rate (hits, misses)</td><td>$req_rate cache requests/second</td></tr> <tr class=tr-0><td class=td-0>Misses</td><td>{$cache['num_misses']}</td></tr>
<tr class=tr-0><td class=td-0>Hit Rate</td><td>$hit_rate cache requests/second</td></tr> <tr class=tr-1><td class=td-0>Request Rate (hits, misses)</td><td>$req_rate_user cache requests/second</td></tr>
<tr class=tr-1><td class=td-0>Miss Rate</td><td>$miss_rate cache requests/second</td></tr> <tr class=tr-0><td class=td-0>Hit Rate</td><td>$hit_rate_user cache requests/second</td></tr>
<tr class=tr-0><td class=td-0>Insert Rate</td><td>$insert_rate cache requests/second</td></tr> <tr class=tr-1><td class=td-0>Miss Rate</td><td>$miss_rate_user cache requests/second</td></tr>
<tr class=tr-1><td class=td-0>Cache full count</td><td>{$cache['expunges']}</td></tr> <tr class=tr-0><td class=td-0>Insert Rate</td><td>$insert_rate_user cache requests/second</td></tr>
</tbody></table> <tr class=tr-1><td class=td-0>Cache full count</td><td>{$cache['expunges']}</td></tr>
</div> </tbody>
</table>
<div class="info div1"><h2>User Cache Information</h2>
<table cellspacing=0><tbody>
<tr class=tr-0><td class=td-0>Cached Variables</td><td>$number_vars ($size_vars)</td></tr>
<tr class=tr-1><td class=td-0>Hits</td><td>{$cache_user['num_hits']}</td></tr>
<tr class=tr-0><td class=td-0>Misses</td><td>{$cache_user['num_misses']}</td></tr>
<tr class=tr-1><td class=td-0>Request Rate (hits, misses)</td><td>$req_rate_user cache requests/second</td></tr>
<tr class=tr-0><td class=td-0>Hit Rate</td><td>$hit_rate_user cache requests/second</td></tr>
<tr class=tr-1><td class=td-0>Miss Rate</td><td>$miss_rate_user cache requests/second</td></tr>
<tr class=tr-0><td class=td-0>Insert Rate</td><td>$insert_rate_user cache requests/second</td></tr>
<tr class=tr-1><td class=td-0>Cache full count</td><td>{$cache_user['expunges']}</td></tr>
</tbody></table>
</div> </div>
<div class="info div2"><h2>Runtime Settings</h2><table cellspacing=0><tbody> <div class="info div2"><h2>Runtime Settings</h2><table cellspacing=0><tbody>
EOB; EOB;
$j = 0; $j = 0;
foreach (ini_get_all('apc') as $k => $v) { foreach (ini_get_all('apcu') as $k => $v) {
echo "<tr class=tr-$j><td class=td-0>",$k,"</td><td>",str_replace(',',',<br />',$v['local_value']),"</td></tr>\n"; echo "<tr class=tr-$j><td class=td-0>",$k,"</td><td>",str_replace(',',',<br />',$v['local_value']),"</td></tr>\n";
$j = 1 - $j; $j = 1 - $j;
} }
...@@ -860,7 +822,7 @@ EOB; ...@@ -860,7 +822,7 @@ EOB;
<table cellspacing=0><tbody> <table cellspacing=0><tbody>
EOB; EOB;
$size='width='.(GRAPH_SIZE+50).' height='.(GRAPH_SIZE+10); $size='width='.(GRAPH_SIZE+50).' height='.(GRAPH_SIZE+10);
echo <<<EOB echo <<<EOB
<tr> <tr>
<td class=td-0>$mem_note</td> <td class=td-0>$mem_note</td>
<td class=td-1>Hits &amp; Misses</td> <td class=td-1>Hits &amp; Misses</td>
...@@ -868,18 +830,18 @@ EOB; ...@@ -868,18 +830,18 @@ EOB;
EOB; EOB;
echo echo
graphics_avail() ? graphics_avail() ?
'<tr>'. '<tr>'.
"<td class=td-0><img alt=\"\" $size src=\"$PHP_SELF?IMG=1&$time\"></td>". "<td class=td-0><img alt=\"\" $size src=\"$PHP_SELF?IMG=1&$time\"></td>".
"<td class=td-1><img alt=\"\" $size src=\"$PHP_SELF?IMG=2&$time\"></td></tr>\n" "<td class=td-1><img alt=\"\" $size src=\"$PHP_SELF?IMG=2&$time\"></td></tr>\n"
: "", : "",
'<tr>', '<tr>',
'<td class=td-0><span class="green box">&nbsp;</span>Free: ',bsize($mem_avail).sprintf(" (%.1f%%)",$mem_avail*100/$mem_size),"</td>\n", '<td class=td-0><span class="green box">&nbsp;</span>Free: ',bsize($mem_avail).sprintf(" (%.1f%%)",$mem_avail*100/$mem_size),"</td>\n",
'<td class=td-1><span class="green box">&nbsp;</span>Hits: ',$cache['num_hits'].sprintf(" (%.1f%%)",$cache['num_hits']*100/($cache['num_hits']+$cache['num_misses'])),"</td>\n", '<td class=td-1><span class="green box">&nbsp;</span>Hits: ',$cache['num_hits'].@sprintf(" (%.1f%%)",$cache['num_hits']*100/($cache['num_hits']+$cache['num_misses'])),"</td>\n",
'</tr>', '</tr>',
'<tr>', '<tr>',
'<td class=td-0><span class="red box">&nbsp;</span>Used: ',bsize($mem_used ).sprintf(" (%.1f%%)",$mem_used *100/$mem_size),"</td>\n", '<td class=td-0><span class="red box">&nbsp;</span>Used: ',bsize($mem_used).sprintf(" (%.1f%%)",$mem_used *100/$mem_size),"</td>\n",
'<td class=td-1><span class="red box">&nbsp;</span>Misses: ',$cache['num_misses'].sprintf(" (%.1f%%)",$cache['num_misses']*100/($cache['num_hits']+$cache['num_misses'])),"</td>\n"; '<td class=td-1><span class="red box">&nbsp;</span>Misses: ',$cache['num_misses'].@sprintf(" (%.1f%%)",$cache['num_misses']*100/($cache['num_hits']+$cache['num_misses'])),"</td>\n";
echo <<< EOB echo <<< EOB
</tr> </tr>
</tbody></table> </tbody></table>
...@@ -906,7 +868,7 @@ EOB; ...@@ -906,7 +868,7 @@ EOB;
} }
$freeseg += count($mem['block_lists'][$i]); $freeseg += count($mem['block_lists'][$i]);
} }
if ($freeseg > 1) { if ($freeseg > 1) {
$frag = sprintf("%.2f%% (%s out of %s in %d fragments)", ($fragsize/$freetotal)*100,bsize($fragsize),bsize($freetotal),$freeseg); $frag = sprintf("%.2f%% (%s out of %s in %d fragments)", ($fragsize/$freetotal)*100,bsize($fragsize),bsize($freetotal),$freeseg);
} else { } else {
...@@ -936,7 +898,7 @@ EOB; ...@@ -936,7 +898,7 @@ EOB;
</tbody></table> </tbody></table>
</div> </div>
EOB; EOB;
break; break;
...@@ -954,71 +916,13 @@ case OB_USER_CACHE: ...@@ -954,71 +916,13 @@ case OB_USER_CACHE:
$fieldheading='User Entry Label'; $fieldheading='User Entry Label';
$fieldkey='info'; $fieldkey='info';
// -----------------------------------------------
// System Cache Entries
// -----------------------------------------------
case OB_SYS_CACHE:
if (!isset($fieldname))
{
$fieldname='filename';
$fieldheading='Script Filename';
if(ini_get("apc.stat")) $fieldkey='inode';
else $fieldkey='filename';
}
if (!empty($MYREQUEST['SH']))
{
echo <<< EOB
<div class="info"><table cellspacing=0><tbody>
<tr><th>Attribute</th><th>Value</th></tr>
EOB;
$m=0;
foreach($scope_list as $j => $list) {
foreach($cache[$list] as $i => $entry) {
if (md5($entry[$fieldkey])!=$MYREQUEST['SH']) continue;
foreach($entry as $k => $value) {
if (!$AUTHENTICATED) {
// hide all path entries if not logged in
$value=preg_replace('/^.*(\\/|\\\\)/','<i>&lt;hidden&gt;</i>/',$value);
}
if ($k == "num_hits") {
$value=sprintf("%s (%.2f%%)",$value,$value*100/$cache['num_hits']);
}
if ($k == 'deletion_time') {
if(!$entry['deletion_time']) $value = "None";
}
echo
"<tr class=tr-$m>",
"<td class=td-0>",ucwords(preg_replace("/_/"," ",$k)),"</td>",
"<td class=td-last>",(preg_match("/time/",$k) && $value!='None') ? date(DATE_FORMAT,$value) : htmlspecialchars($value, ENT_QUOTES, 'UTF-8'),"</td>",
"</tr>";
$m=1-$m;
}
if($fieldkey=='info') {
echo "<tr class=tr-$m><td class=td-0>Stored Value</td><td class=td-last><pre>";
$output = var_export(apc_fetch($entry[$fieldkey]),true);
echo htmlspecialchars($output, ENT_QUOTES, 'UTF-8');
echo "</pre></td></tr>\n";
}
break;
}
}
echo <<<EOB
</tbody></table>
</div>
EOB;
break;
}
$cols=6; $cols=6;
echo <<<EOB echo <<<EOB
<div class=sorting><form>Scope: <div class=sorting><form>Scope:
<input type=hidden name=OB value={$MYREQUEST['OB']}> <input type=hidden name=OB value={$MYREQUEST['OB']}>
<select name=SCOPE> <select name=SCOPE>
EOB; EOB;
echo echo
"<option value=A",$MYREQUEST['SCOPE']=='A' ? " selected":"",">Active</option>", "<option value=A",$MYREQUEST['SCOPE']=='A' ? " selected":"",">Active</option>",
"<option value=D",$MYREQUEST['SCOPE']=='D' ? " selected":"",">Deleted</option>", "<option value=D",$MYREQUEST['SCOPE']=='D' ? " selected":"",">Deleted</option>",
"</select>", "</select>",
...@@ -1032,7 +936,7 @@ EOB; ...@@ -1032,7 +936,7 @@ EOB;
"<option value=D",$MYREQUEST['SORT1']=='D' ? " selected":"",">Deleted at</option>"; "<option value=D",$MYREQUEST['SORT1']=='D' ? " selected":"",">Deleted at</option>";
if($fieldname=='info') echo if($fieldname=='info') echo
"<option value=D",$MYREQUEST['SORT1']=='T' ? " selected":"",">Timeout</option>"; "<option value=D",$MYREQUEST['SORT1']=='T' ? " selected":"",">Timeout</option>";
echo echo
'</select>', '</select>',
'<select name=SORT2>', '<select name=SORT2>',
'<option value=D',$MYREQUEST['SORT2']=='D' ? ' selected':'','>DESC</option>', '<option value=D',$MYREQUEST['SORT2']=='D' ? ' selected':'','>DESC</option>',
...@@ -1081,16 +985,17 @@ EOB; ...@@ -1081,16 +985,17 @@ EOB;
// builds list with alpha numeric sortable keys // builds list with alpha numeric sortable keys
// //
$list = array(); $list = array();
foreach($cache[$scope_list[$MYREQUEST['SCOPE']]] as $i => $entry) { foreach($cache[$scope_list[$MYREQUEST['SCOPE']]] as $i => $entry) {
switch($MYREQUEST['SORT1']) { switch($MYREQUEST['SORT1']) {
case 'A': $k=sprintf('%015d-',$entry['access_time']); break; case 'A': $k=sprintf('%015d-',$entry['access_time']); break;
case 'H': $k=sprintf('%015d-',$entry['num_hits']); break; case 'H': $k=sprintf('%015d-',$entry['num_hits']); break;
case 'Z': $k=sprintf('%015d-',$entry['mem_size']); break; case 'Z': $k=sprintf('%015d-',$entry['mem_size']); break;
case 'M': $k=sprintf('%015d-',$entry['mtime']); break; case 'M': $k=sprintf('%015d-',$entry['mtime']); break;
case 'C': $k=sprintf('%015d-',$entry['creation_time']); break; case 'C': $k=sprintf('%015d-',$entry['creation_time']); break;
case 'T': $k=sprintf('%015d-',$entry['ttl']); break; case 'T': $k=sprintf('%015d-',$entry['ttl']); break;
case 'D': $k=sprintf('%015d-',$entry['deletion_time']); break; case 'D': $k=sprintf('%015d-',$entry['deletion_time']); break;
case 'S': $k=''; break; case 'S': $k=$entry["info"]; break;
} }
if (!$AUTHENTICATED) { if (!$AUTHENTICATED) {
// hide all path entries if not logged in // hide all path entries if not logged in
...@@ -1101,22 +1006,22 @@ EOB; ...@@ -1101,22 +1006,22 @@ EOB;
} }
if ($list) { if ($list) {
// sort list // sort list
// //
switch ($MYREQUEST['SORT2']) { switch ($MYREQUEST['SORT2']) {
case "A": krsort($list); break; case "A": krsort($list); break;
case "D": ksort($list); break; case "D": ksort($list); break;
} }
// output list // output list
$i=0; $i=0;
foreach($list as $k => $entry) { foreach($list as $k => $entry) {
if(!$MYREQUEST['SEARCH'] || preg_match($MYREQUEST['SEARCH'], $entry[$fieldname]) != 0) { if(!$MYREQUEST['SEARCH'] || preg_match($MYREQUEST['SEARCH'], $entry[$fieldname]) != 0) {
$sh=md5($entry["info"]);
$field_value = htmlentities(strip_tags($entry[$fieldname],''), ENT_QUOTES, 'UTF-8'); $field_value = htmlentities(strip_tags($entry[$fieldname],''), ENT_QUOTES, 'UTF-8');
echo echo
'<tr class=tr-',$i%2,'>', '<tr id="key-'. $sh .'" class=tr-',$i%2,'>',
"<td class=td-0><a href=\"$MY_SELF&OB=",$MYREQUEST['OB'],"&SH=",md5($entry[$fieldkey]),"\">",$field_value,'</a></td>', "<td class=td-0><a href=\"$MY_SELF&OB=",$MYREQUEST['OB'],"&SH=",$sh,"#key-". $sh ."\">",$field_value,'</a></td>',
'<td class="td-n center">',$entry['num_hits'],'</td>', '<td class="td-n center">',$entry['num_hits'],'</td>',
'<td class="td-n right">',$entry['mem_size'],'</td>', '<td class="td-n right">',$entry['mem_size'],'</td>',
'<td class="td-n center">',date(DATE_FORMAT,$entry['access_time']),'</td>', '<td class="td-n center">',date(DATE_FORMAT,$entry['access_time']),'</td>',
...@@ -1141,141 +1046,19 @@ EOB; ...@@ -1141,141 +1046,19 @@ EOB;
echo '<td class="td-last center"> &nbsp; </td>'; echo '<td class="td-last center"> &nbsp; </td>';
} }
echo '</tr>'; echo '</tr>';
if ($sh == $MYREQUEST["SH"]) {
echo '<tr>';
echo '<td colspan="7"><pre>'.htmlentities(print_r(apcu_fetch($entry['info']), 1)).'</pre></td>';
echo '</tr>';
}
$i++; $i++;
if ($i == $MYREQUEST['COUNT']) if ($i == $MYREQUEST['COUNT'])
break; break;
} }
} }
} else {
echo '<tr class=tr-0><td class="center" colspan=',$cols,'><i>No data</i></td></tr>';
}
echo <<< EOB
</tbody></table>
EOB;
if ($list && $i < count($list)) {
echo "<a href=\"$MY_SELF&OB=",$MYREQUEST['OB'],"&COUNT=0\"><i>",count($list)-$i,' more available...</i></a>';
}
echo <<< EOB
</div>
EOB;
break;
// -----------------------------------------------
// Per-Directory System Cache Entries
// -----------------------------------------------
case OB_SYS_CACHE_DIR:
if (!$AUTHENTICATED) {
break;
}
echo <<<EOB
<div class=sorting><form>Scope:
<input type=hidden name=OB value={$MYREQUEST['OB']}>
<select name=SCOPE>
EOB;
echo
"<option value=A",$MYREQUEST['SCOPE']=='A' ? " selected":"",">Active</option>",
"<option value=D",$MYREQUEST['SCOPE']=='D' ? " selected":"",">Deleted</option>",
"</select>",
", Sorting:<select name=SORT1>",
"<option value=H",$MYREQUEST['SORT1']=='H' ? " selected":"",">Total Hits</option>",
"<option value=Z",$MYREQUEST['SORT1']=='Z' ? " selected":"",">Total Size</option>",
"<option value=T",$MYREQUEST['SORT1']=='T' ? " selected":"",">Number of Files</option>",
"<option value=S",$MYREQUEST['SORT1']=='S' ? " selected":"",">Directory Name</option>",
"<option value=A",$MYREQUEST['SORT1']=='A' ? " selected":"",">Avg. Size</option>",
"<option value=C",$MYREQUEST['SORT1']=='C' ? " selected":"",">Avg. Hits</option>",
'</select>',
'<select name=SORT2>',
'<option value=D',$MYREQUEST['SORT2']=='D' ? ' selected':'','>DESC</option>',
'<option value=A',$MYREQUEST['SORT2']=='A' ? ' selected':'','>ASC</option>',
'</select>',
'<select name=COUNT onChange="form.submit()">',
'<option value=10 ',$MYREQUEST['COUNT']=='10' ? ' selected':'','>Top 10</option>',
'<option value=20 ',$MYREQUEST['COUNT']=='20' ? ' selected':'','>Top 20</option>',
'<option value=50 ',$MYREQUEST['COUNT']=='50' ? ' selected':'','>Top 50</option>',
'<option value=100',$MYREQUEST['COUNT']=='100'? ' selected':'','>Top 100</option>',
'<option value=150',$MYREQUEST['COUNT']=='150'? ' selected':'','>Top 150</option>',
'<option value=200',$MYREQUEST['COUNT']=='200'? ' selected':'','>Top 200</option>',
'<option value=500',$MYREQUEST['COUNT']=='500'? ' selected':'','>Top 500</option>',
'<option value=0 ',$MYREQUEST['COUNT']=='0' ? ' selected':'','>All</option>',
'</select>',
", Group By Dir Level:<select name=AGGR>",
"<option value='' selected>None</option>";
for ($i = 1; $i < 10; $i++)
echo "<option value=$i",$MYREQUEST['AGGR']==$i ? " selected":"",">$i</option>";
echo '</select>',
'&nbsp;<input type=submit value="GO!">',
'</form></div>',
'<div class="info"><table cellspacing=0><tbody>',
'<tr>',
'<th>',sortheader('S','Directory Name', "&OB=".$MYREQUEST['OB']),'</th>',
'<th>',sortheader('T','Number of Files',"&OB=".$MYREQUEST['OB']),'</th>',
'<th>',sortheader('H','Total Hits', "&OB=".$MYREQUEST['OB']),'</th>',
'<th>',sortheader('Z','Total Size', "&OB=".$MYREQUEST['OB']),'</th>',
'<th>',sortheader('C','Avg. Hits', "&OB=".$MYREQUEST['OB']),'</th>',
'<th>',sortheader('A','Avg. Size', "&OB=".$MYREQUEST['OB']),'</th>',
'</tr>';
// builds list with alpha numeric sortable keys
//
$tmp = $list = array();
foreach($cache[$scope_list[$MYREQUEST['SCOPE']]] as $entry) {
$n = dirname($entry['filename']);
if ($MYREQUEST['AGGR'] > 0) {
$n = preg_replace("!^(/?(?:[^/\\\\]+[/\\\\]){".($MYREQUEST['AGGR']-1)."}[^/\\\\]*).*!", "$1", $n);
}
if (!isset($tmp[$n])) {
$tmp[$n] = array('hits'=>0,'size'=>0,'ents'=>0);
}
$tmp[$n]['hits'] += $entry['num_hits'];
$tmp[$n]['size'] += $entry['mem_size'];
++$tmp[$n]['ents'];
}
foreach ($tmp as $k => $v) {
switch($MYREQUEST['SORT1']) {
case 'A': $kn=sprintf('%015d-',$v['size'] / $v['ents']);break;
case 'T': $kn=sprintf('%015d-',$v['ents']); break;
case 'H': $kn=sprintf('%015d-',$v['hits']); break;
case 'Z': $kn=sprintf('%015d-',$v['size']); break;
case 'C': $kn=sprintf('%015d-',$v['hits'] / $v['ents']);break;
case 'S': $kn = $k; break;
}
$list[$kn.$k] = array($k, $v['ents'], $v['hits'], $v['size']);
}
if ($list) {
// sort list
//
switch ($MYREQUEST['SORT2']) {
case "A": krsort($list); break;
case "D": ksort($list); break;
}
// output list
$i = 0;
foreach($list as $entry) {
echo
'<tr class=tr-',$i%2,'>',
"<td class=td-0>",$entry[0],'</a></td>',
'<td class="td-n center">',$entry[1],'</td>',
'<td class="td-n center">',$entry[2],'</td>',
'<td class="td-n center">',$entry[3],'</td>',
'<td class="td-n center">',round($entry[2] / $entry[1]),'</td>',
'<td class="td-n center">',round($entry[3] / $entry[1]),'</td>',
'</tr>';
if (++$i == $MYREQUEST['COUNT']) break;
}
} else { } else {
echo '<tr class=tr-0><td class="center" colspan=6><i>No data</i></td></tr>'; echo '<tr class=tr-0><td class="center" colspan=',$cols,'><i>No data</i></td></tr>';
} }
echo <<< EOB echo <<< EOB
</tbody></table> </tbody></table>
...@@ -1295,7 +1078,7 @@ EOB; ...@@ -1295,7 +1078,7 @@ EOB;
// ----------------------------------------------- // -----------------------------------------------
case OB_VERSION_CHECK: case OB_VERSION_CHECK:
echo <<<EOB echo <<<EOB
<div class="info"><h2>APC Version Information</h2> <div class="info"><h2>APCu Version Information</h2>
<table cellspacing=0><tbody> <table cellspacing=0><tbody>
<tr> <tr>
<th></th> <th></th>
...@@ -1303,24 +1086,24 @@ case OB_VERSION_CHECK: ...@@ -1303,24 +1086,24 @@ case OB_VERSION_CHECK:
EOB; EOB;
if (defined('PROXY')) { if (defined('PROXY')) {
$ctxt = stream_context_create( array( 'http' => array( 'proxy' => PROXY, 'request_fulluri' => True ) ) ); $ctxt = stream_context_create( array( 'http' => array( 'proxy' => PROXY, 'request_fulluri' => True ) ) );
$rss = @file_get_contents("http://pecl.php.net/feeds/pkg_apc.rss", False, $ctxt); $rss = @file_get_contents("http://pecl.php.net/feeds/pkg_apcu.rss", False, $ctxt);
} else { } else {
$rss = @file_get_contents("http://pecl.php.net/feeds/pkg_apc.rss"); $rss = @file_get_contents("http://pecl.php.net/feeds/pkg_apcu.rss");
} }
if (!$rss) { if (!$rss) {
echo '<tr class="td-last center"><td>Unable to fetch version information.</td></tr>'; echo '<tr class="td-last center"><td>Unable to fetch version information.</td></tr>';
} else { } else {
$apcversion = phpversion('apc'); $apcversion = phpversion('apcu');
preg_match('!<title>APC ([0-9.]+)</title>!', $rss, $match); preg_match('!<title>APCu ([0-9.]+)</title>!', $rss, $match);
echo '<tr class="tr-0 center"><td>'; echo '<tr class="tr-0 center"><td>';
if (version_compare($apcversion, $match[1], '>=')) { if (version_compare($apcversion, $match[1], '>=')) {
echo '<div class="ok">You are running the latest version of APC ('.$apcversion.')</div>'; echo '<div class="ok">You are running the latest version of APCu ('.$apcversion.')</div>';
$i = 3; $i = 3;
} else { } else {
echo '<div class="failed">You are running an older version of APC ('.$apcversion.'), echo '<div class="failed">You are running an older version of APCu ('.$apcversion.'),
newer version '.$match[1].' is available at <a href="http://pecl.php.net/package/APC/'.$match[1].'"> newer version '.$match[1].' is available at <a href="http://pecl.php.net/package/APCu/'.$match[1].'">
http://pecl.php.net/package/APC/'.$match[1].'</a> http://pecl.php.net/package/APCu/'.$match[1].'</a>
</div>'; </div>';
$i = -1; $i = -1;
} }
...@@ -1328,18 +1111,19 @@ EOB; ...@@ -1328,18 +1111,19 @@ EOB;
echo '<tr class="tr-0"><td><h3>Change Log:</h3><br/>'; echo '<tr class="tr-0"><td><h3>Change Log:</h3><br/>';
preg_match_all('!<(title|description)>([^<]+)</\\1>!', $rss, $match); preg_match_all('!<(title|description)>([^<]+)</\\1>!', $rss, $match);
next($match[2]); next($match[2]); $changelog = $match[2];
while (list(,$v) = each($match[2])) { for ($j = 2; $j + 1 < count($changelog); $j += 2) {
list(,$ver) = explode(' ', $v, 2); $v = $changelog[$j];
if ($i < 0 && version_compare($apcversion, $ver, '>=')) { if ($i < 0 && version_compare($apcversion, $ver, '>=')) {
break; break;
} else if (!$i--) { } else if (!$i--) {
break; break;
} }
echo "<b><a href=\"http://pecl.php.net/package/APC/$ver\">".htmlspecialchars($v, ENT_QUOTES, 'UTF-8')."</a></b><br><blockquote>"; list($unused, $ver) = $v;
echo nl2br(htmlspecialchars(current($match[2]), ENT_QUOTES, 'UTF-8'))."</blockquote>"; $changes = $changelog[$j + 1];
next($match[2]); echo "<b><a href=\"http://pecl.php.net/package/APCu/$ver\">".htmlspecialchars($v, ENT_QUOTES, 'UTF-8')."</a></b><br><blockquote>";
echo nl2br(htmlspecialchars($changes, ENT_QUOTES, 'UTF-8'))."</blockquote>";
} }
echo '</td></tr>'; echo '</td></tr>';
} }
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment