--- phpSysInfo-2.1/includes/os/class.Linux.inc.php 2002-06-05 18:12:43.000000000 -0300 +++ includes/os/class.Linux.inc.php 2003-05-29 03:26:52.000000000 -0300 @@ -319,61 +318,92 @@ } function memory () { - if ($fd = fopen('/proc/meminfo', 'r')) { - while ($buf = fgets($fd, 4096)) { - if (preg_match('/Mem:\s+(.*)$/', $buf, $ar_buf)) { - $ar_buf = preg_split('/\s+/', $ar_buf[1], 6); - - $results['ram'] = array(); - - $results['ram']['total'] = $ar_buf[0] / 1024; - $results['ram']['used'] = $ar_buf[1] / 1024; - $results['ram']['free'] = $ar_buf[2] / 1024; - $results['ram']['shared'] = $ar_buf[3] / 1024; - $results['ram']['buffers'] = $ar_buf[4] / 1024; - $results['ram']['cached'] = $ar_buf[5] / 1024; - - // I don't like this since buffers and cache really aren't - // 'used' per say, but I get too many emails about it. - $results['ram']['t_used'] = $results['ram']['used']; - $results['ram']['t_free'] = $results['ram']['total'] - $results['ram']['t_used']; - $results['ram']['percent'] = round(($results['ram']['t_used'] * 100) / $results['ram']['total']); - } - - if (preg_match('/Swap:\s+(.*)$/', $buf, $ar_buf)) { - $ar_buf = preg_split('/\s+/', $ar_buf[1], 3); - - $results['swap'] = array(); - - $results['swap']['total'] = $ar_buf[0] / 1024; - $results['swap']['used'] = $ar_buf[1] / 1024; - $results['swap']['free'] = $ar_buf[2] / 1024; - $results['swap']['percent'] = round(($ar_buf[1] * 100) / $ar_buf[0]); - - // Get info on individual swap files - $swaps = file ('/proc/swaps'); - $swapdevs = split("\n", $swaps); - - for ($i = 1; $i < (sizeof($swapdevs) - 1); $i++) { - $ar_buf = preg_split('/\s+/', $swapdevs[$i], 6); - - $results['devswap'][$i - 1] = array(); - $results['devswap'][$i - 1]['dev'] = $ar_buf[0]; - $results['devswap'][$i - 1]['total'] = $ar_buf[2]; - $results['devswap'][$i - 1]['used'] = $ar_buf[3]; - $results['devswap'][$i - 1]['free'] = ($results['devswap'][$i - 1]['total'] - $results['devswap'][$i - 1]['used']); - $results['devswap'][$i - 1]['percent'] = round(($ar_buf[3] * 100) / $ar_buf[2]); - } - break; - } - } - fclose($fd); - } else { - $results['ram'] = array(); - $results['swap'] = array(); - $results['devswap'] = array(); - } - return $results; + $uname = posix_uname(); + if ($fd = fopen('/proc/meminfo', 'r')) { + if(preg_match('/^2\.(5|6)\.\d+/i',$uname['release'])) { + $results['ram'] = array(); + $results['swap'] = array(); + $results['devswap'] = array(); + + while ($buf = fgets($fd, 4096)) { + if (preg_match('/^MemTotal:\s+(.*)\s*kB/i', $buf, $ar_buf)) { + $results['ram']['total']=$ar_buf[1]; + + } else if (preg_match('/^MemFree:\s+(.*)\s*kB/i', $buf, $ar_buf)) { + $results['ram']['free']=$ar_buf[1]; + + } else if (preg_match('/^Cached:\s+(.*)\s*kB/i', $buf, $ar_buf)) { + $results['ram']['cached']=$ar_buf[1]; + + } else if (preg_match('/^Buffers:\s+(.*)\s*kB/i', $buf, $ar_buf)) { + $results['ram']['buffers']=$ar_buf[1]; + } else if (preg_match('/^SwapTotal:\s+(.*)\s*kB/i', $buf, $ar_buf)) { + $results['swap']['total']=$ar_buf[1]; + } else if (preg_match('/^SwapFree:\s+(.*)\s*kB/i', $buf, $ar_buf)) { + $results['swap']['free']=$ar_buf[1]; + } + + } + $results['ram']['shared']=0; + $results['ram']['used']=$results['ram']['total']-$results['ram']['free']; + $results['swap']['used']=$results['swap']['total']-$results['swap']['free']; + } else { + while ($buf = fgets($fd, 4096)) { + if (preg_match('/Mem:\s+(.*)$/', $buf, $ar_buf)) { + $ar_buf = preg_split('/\s+/', $ar_buf[1], 6); + + $results['ram'] = array(); + + $results['ram']['total'] = $ar_buf[0] / 1024; + $results['ram']['used'] = $ar_buf[1] / 1024; + $results['ram']['free'] = $ar_buf[2] / 1024; + $results['ram']['shared'] = $ar_buf[3] / 1024; + $results['ram']['buffers'] = $ar_buf[4] / 1024; + $results['ram']['cached'] = $ar_buf[5] / 1024; + } + + if (preg_match('/Swap:\s+(.*)$/', $buf, $ar_buf)) { + $ar_buf = preg_split('/\s+/', $ar_buf[1], 3); + + $results['swap'] = array(); + + $results['swap']['total'] = $ar_buf[0] / 1024; + $results['swap']['used'] = $ar_buf[1] / 1024; + $results['swap']['free'] = $ar_buf[2] / 1024; + + // Get info on individual swap files + break; + } + } + fclose($fd); + } + $swaps = file ('/proc/swaps'); + $swapdevs = split("\n", $swaps); + + for ($i = 1; $i < (sizeof($swapdevs) - 1); $i++) { + $ar_buf = preg_split('/\s+/', $swapdevs[$i], 6); + + $results['devswap'][$i - 1] = array(); + $results['devswap'][$i - 1]['dev'] = $ar_buf[0]; + $results['devswap'][$i - 1]['total'] = $ar_buf[2]; + $results['devswap'][$i - 1]['used'] = $ar_buf[3]; + $results['devswap'][$i - 1]['free'] = ($results['devswap'][$i - 1]['total'] - $results['devswap'][$i - 1]['used']); + $results['devswap'][$i - 1]['percent'] = round(($ar_buf[3] * 100) / $ar_buf[2]); + } + + // I don't like this since buffers and cache really aren't + // 'used' per say, but I get too many emails about it. + $results['ram']['t_used'] = $results['ram']['used']; + $results['ram']['t_free'] = $results['ram']['total'] - $results['ram']['t_used']; + $results['ram']['percent'] = round(($results['ram']['t_used'] * 100) / $results['ram']['total']); + $results['swap']['percent'] = round(($results['swap']['used'] * 100) / $results['swap']['total']); + + } else { + $results['ram'] = array(); + $results['swap'] = array(); + $results['devswap'] = array(); + } + return $results; } function filesystems () {