Note: The FreeBSD version of phpSysInfo is work in progress, some things currently don't work";
class sysinfo
{
function grab_key($key)
{
$s = `sysctl $key`;
$s = ereg_replace($key . ': ','',$s);
return $s;
}
function hostname()
{
if ( !($result = getenv('SERVER_NAME')) ) {
$result = "N.A.";
}
return $result;
}
function chostname()
{
return `hostname`;
}
function ip_addr()
{
if (!($result = getenv('SERVER_ADDR'))) {
$result = gethostbyname(sys_chostname());
}
return $result;
}
function kernel()
{
$s = $this->grab_key('kern.version');
$a = explode(':',$s);
return $a[0];
}
function uptime()
{
$a = explode(' ',$this->grab_key('kern.boottime'));
$sys_ticks = $a[6];
$min = $sys_ticks / 60;
$hours = $min / 60;
$days = floor( $hours / 24 );
$hours = floor( $hours - ($days * 24) );
$min = floor( $min - ($days * 60 * 24) - ($hours * 60) );
if ( $days != 0 ) {
$result = "$days days, ";
}
if ( $hours != 0 ) {
$result .= "$hours hours, ";
}
$result .= "$min minutes";
return $result;
}
function users()
{
return trim(`/usr/bin/who | wc -l`);
}
function loadavg()
{
$s = $this->grab_key('vm.loadavg');
$s = ereg_replace('{ ','',$s);
$s = ereg_replace(' }','',$s);
$results = explode(' ',$s);
return $results;
}
// This currently only works on single CPU systems.
// I do not have a dual CPU machine to make it work
function cpu_info()
{
$results = array();
$ar_buf = array();
$results['model'] = $this->grab_key('hw.model');
$results['cpus'] = $this->grab_key('hw.ncpu');
/* if ($fd = fopen('/proc/cpuinfo', 'r'))
{
while ($buf = fgets($fd, 4096))
{
list($key, $value) = preg_split('/\s+:\s+/', trim($buf), 2);
// All of the tags here are highly architecture dependant.
// the only way I could reconstruct them for machines I don't
// have is to browse the kernel source. So if your arch isn't
// supported, tell me you want it written in.
switch ($key)
{
case 'model name':
$results['model'] = $value;
break;
case 'cpu MHz':
$results['mhz'] = sprintf('%.2f', $value);
break;
case 'clock': // For PPC arch (damn borked POS)
$results['mhz'] = sprintf('%.2f', $value);
break;
case 'cpu': // For PPC arch (damn borked POS)
$results['model'] = $value;
break;
case 'revision': // For PPC arch (damn borked POS)
$results['model'] .= ' ( rev: ' . $value . ')';
break;
case 'cache size':
$results['cache'] = $value;
break;
case 'bogomips':
$results['bogomips'] += $value;
break;
case 'processor':
$results['cpus'] += 1;
break;
}
}
fclose($fd);
}
*/
$keys = compat_array_keys( $results );
$keys2be = array( "model", "mhz", "cache", "bogomips", "cpus" );
while ( $ar_buf = each( $keys2be ) ) {
if (! compat_in_array( $ar_buf[1], $keys ) ) {
$results[$ar_buf[1]] = 'N.A.';
}
}
return $results;
}
function pci()
{
}
function ide()
{
}
function scsi()
{
}
function network()
{
}
function memory()
{
}
function filesystems()
{
$df = `/bin/df -kP`;
$mounts = split( "\n", $df );
$fstype = array();
$s = `mount`;
$lines = explode("\n",$s);
$i = 0;
while (list(,$line) = each($lines)) {
ereg('(.*) \((.*)\,(.*)\)',$line,$a);
$m = explode(' ',$a[0]);
$fsdev[$m[0]] = $a[2];
}
for ( $i = 1; $i < sizeof($mounts) - 1; $i++ ) {
$ar_buf = preg_split("/\s+/", $mounts[$i], 6);
$results[$i - 1] = array();
$results[$i - 1]['disk'] = $ar_buf[0];
$results[$i - 1]['size'] = $ar_buf[1];
$results[$i - 1]['used'] = $ar_buf[2];
$results[$i - 1]['free'] = $ar_buf[3];
$results[$i - 1]['percent'] = $ar_buf[4];
$results[$i - 1]['mount'] = $ar_buf[5];
($fstype[$ar_buf[5]]) ? $results[$i - 1]['fstype'] = $fstype[$ar_buf[5]] : $results[$i - 1]['fstype'] = $fsdev[$ar_buf[0]];
}
return $results;
}
}