226 lines
		
	
	
		
			4.9 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			226 lines
		
	
	
		
			4.9 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
<?php
 | 
						|
//
 | 
						|
// phpSysInfo - A PHP System Information Script
 | 
						|
// http://phpsysinfo.sourceforge.net/
 | 
						|
//
 | 
						|
// This program is free software; you can redistribute it and/or
 | 
						|
// modify it under the terms of the GNU General Public License
 | 
						|
// as published by the Free Software Foundation; either version 2
 | 
						|
// of the License, or (at your option) any later version.
 | 
						|
//
 | 
						|
// This program is distributed in the hope that it will be useful,
 | 
						|
// but WITHOUT ANY WARRANTY; without even the implied warranty of
 | 
						|
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 | 
						|
// GNU General Public License for more details.
 | 
						|
//
 | 
						|
// You should have received a copy of the GNU General Public License
 | 
						|
// along with this program; if not, write to the Free Software
 | 
						|
// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
 | 
						|
//
 | 
						|
// $Id: class.FreeBSD.inc.php,v 1.1 2001/08/05 08:56:37 jengo Exp $
 | 
						|
//
 | 
						|
 | 
						|
echo "<center><b>Note: The FreeBSD version of phpSysInfo is work in progress, some things currently don't work</b></center>";
 | 
						|
 | 
						|
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. <infinite@sigkill.com>
 | 
						|
					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;
 | 
						|
	}
 | 
						|
 | 
						|
}
 |