Our billing system supports network monitoring and shows uptime and load percentage, however, the PHP status script they provide says it is Linux only. Configuring PHP to work with Server 2008 is not an issue, but I don't know PHP. Would it be possible to manipulate this code to work on Windows?
<?php
/*
*************************************************************************
* *
* WHMCompleteSolution - Client Management, Billing & Support System *
* Copyright (c) 2007-2008 WHMCS. All Rights Reserved, *
* Release Date: 12th December 2008 *
* Version 3.8.1 Stable *
* *
*************************************************************************
* *
* Email: [email protected] *
* Website: htttp://www.whmcs.com *
* *
*************************************************************************
This file can be uploaded to each of your linux web servers in order to
display current load and uptime statistics for the server in the Server
Status page of the WHMCS Client Area and Admin Area Homepage
*/
error_reporting(0);
if (ini_get('disable_functions')) {
$disabled_funcs=array_map('trim',explode(',',ini_get('disable_functions')));
}
$action=$_GET["action"];
if ($action=="phpinfo") {
} else {
$users[0]="Unavailable";
$users[1]="--";
$loadnow="Unavailable";
$load15="--";
$load30="--";
if (in_array('exec',$disabled_funcs)) {
$load=file_get_contents("/proc/loadavg");
$load=explode(' ',$load);
$loadnow=$load[0];
$load15=$load[1];
$load30=$load[2];
} else {
$reguptime=trim(exec("uptime"));
if ($reguptime) {
if (preg_match("/, *(\d) (users?), .*: (.*), (.*), (.*)/",$reguptime,$uptime)) {
$users[0]=$uptime[1];
$users[1]=$uptime[2];
$loadnow=$uptime[3];
$load15=$uptime[4];
$load30=$uptime[5];
}
}
}
if (in_array('shell_exec',$disabled_funcs)) {
$uptime_text=file_get_contents("/proc/uptime");
$uptime=substr($uptime_text,0,strpos($uptime_text," "));
} else {
$uptime=shell_exec("cut -d. -f1 /proc/uptime");
}
$days=floor($uptime/60/60/24);
$hours=str_pad($uptime/60/60%24,2,"0",STR_PAD_LEFT);
$mins=str_pad($uptime/60%60,2,"0",STR_PAD_LEFT);
$secs=str_pad($uptime%60,2,"0",STR_PAD_LEFT);
$phpver=phpversion();
if(function_exists("mysql_get_client_info()")) $mysqlver=mysql_get_client_info();
if(function_exists("zend_version()")) $zendver=zend_version();
echo "<load>$loadnow</load>\n";
echo "<uptime>$days Days $hours:$mins:$secs</uptime>\n";
echo "<phpver>$phpver</phpver>\n";
echo "<mysqlver>$mysqlver</mysqlver>\n";
echo "<zendver>$zendver</zendver>\n";
}
?>
This version combines some of the ideas suggested here and some of my own into a file that should work roughly the same on both *nix and Windows. Also corrected a few glaring errors/lazy codes in the original.
Will not work on Windows if exec()
is disabled. There is no way around this that I can see.
Let me know how you get on.
<?php
/*
*************************************************************************
* *
* WHMCompleteSolution - Client Management, Billing & Support System *
* Copyright (c) 2007-2008 WHMCS. All Rights Reserved, *
* Release Date: 12th December 2008 *
* Version 3.8.1 Stable *
* *
*************************************************************************
* *
* Email: [email protected] *
* Website: htttp://www.whmcs.com *
* *
*************************************************************************
Modified by DaveRandom, Sept 2011
This file can be uploaded to each of your linux/Windows web servers in
order to display current load and uptime statistics for the server in the
Server Status page of the WHMCS Client Area and Admin Area Homepage
*/
error_reporting(0);
if (ini_get('disable_functions')) {
$disabled_funcs = array_map('trim',explode(',',ini_get('disable_functions')));
}
$action = (isset($_GET["action"])) ? $_GET["action"] : NULL;
if ($action == "phpinfo") {
// Seems as though something is missing here - maybe phpinfo() ?
} else {
// Stuff that works everywhere
$phpver = phpversion();
$mysqlver = (function_exists("mysql_get_client_info")) ? mysql_get_client_info() : '';
$zendver = (function_exists("zend_version")) ? zend_version() : '';
// Default values
$users[0] = $loadnow = "Unavailable";
$users[1] = $load15 = $load30 = "--";
$uptime_str = '';
if (strpos(strtolower(PHP_OS),'win') !== FALSE) {
// For Windaz
if (!in_array('exec',$disabled_funcs)) {
set_time_limit(150); // 'systeminfo' command can take a while...
$uptime = exec('systeminfo | find "System Up"');
$parts = explode(':',$uptime);
$parts = array_pop($parts);
$parts = explode(',',trim($parts));
foreach (array('days','hours','mins','secs') as $k => $v) {
$parts[$k] = explode(' ',trim($parts[$k]));
$$v = ($k) ? str_pad(array_shift($parts[$k]),2,'0',STR_PAD_LEFT) : array_shift($parts[$k]);
}
$uptime_str = "$days Days $hours:$mins:$secs";
exec('typeperf -sc 1 "\Processor(*)\% Processor Time"',$result);
for ($i = 0; trim($result[$i]) == ''; $i++) continue;
$parts = explode(',',$result[++$i]);
$loadnow = (is_numeric($loadnow = trim(trim(array_pop($parts)),'"\''))) ? $loadnow : 'Unavailable';
}
} else {
// For *nix
if (in_array('exec',$disabled_funcs)) {
$load = file_get_contents("/proc/loadavg");
$load = explode(' ',$load);
$loadnow = $load[0];
$load15 = $load[1];
$load30 = $load[2];
} else if (($reguptime = trim(exec("uptime"))) && preg_match("/, *(\\d) (users?), .*: (.*), (.*), (.*)/",$reguptime,$uptime)) {
$users[0] = $uptime[1];
$users[1] = $uptime[2];
$loadnow = $uptime[3];
$load15 = $uptime[4];
$load30 = $uptime[5];
}
if (in_array('shell_exec',$disabled_funcs)) {
$uptime_text = file_get_contents("/proc/uptime");
$uptime = substr($uptime_text,0,strpos($uptime_text," "));
} else {
$uptime = shell_exec("cut -d. -f1 /proc/uptime");
}
$days = floor($uptime/60/60/24);
$hours = str_pad($uptime/60/60%24,2,"0",STR_PAD_LEFT);
$mins = str_pad($uptime/60%60,2,"0",STR_PAD_LEFT);
$secs = str_pad($uptime%60,2,"0",STR_PAD_LEFT);
$uptime_str = "$days Days $hours:$mins:$secs";
}
echo "<load>$loadnow</load>\n";
echo "<uptime>$uptime_str</uptime>\n";
echo "<phpver>$phpver</phpver>\n";
echo "<mysqlver>$mysqlver</mysqlver>\n";
echo "<zendver>$zendver</zendver>\n";
}