date('Y-m-d H:i:s T'), 'mem_info' => $meminfo, 'partitions' => disk_list() ); } function disk_list() { $partitions = array(); // Fetch partition information from df command // I would have used disk_free_space() and disk_total_space() here but // there appears to be no way to get a list of partitions in PHP? $output = array(); @exec('df --block-size=1', $output); foreach($output as $line) { $columns = array(); foreach(explode(' ', $line) as $column) { $column = trim($column); if($column != '') $columns[] = $column; } // Only process 6 column rows // (This has the bonus of ignoring the first row which is 7) if(count($columns) == 6) { $partition = $columns[5]; $partitions[$partition]['Temporary']['bool'] = in_array($columns[0], array('tmpfs', 'devtmpfs')); $partitions[$partition]['Partition']['text'] = $partition; $partitions[$partition]['FileSystem']['text'] = $columns[0]; if(is_numeric($columns[1]) && is_numeric($columns[2]) && is_numeric($columns[3])) { $partitions[$partition]['Size']['value'] = $columns[1]; $partitions[$partition]['Free']['value'] = $columns[3]; $partitions[$partition]['Used']['value'] = $columns[2]; } else { // Fallback if we don't get numerical values $partitions[$partition]['Size']['text'] = $columns[1]; $partitions[$partition]['Used']['text'] = $columns[2]; $partitions[$partition]['Free']['text'] = $columns[3]; } } } return $partitions; } function formatSize( $bytes ) { $types = array( 'B', 'KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB' ); for( $i = 0; $bytes >= 1024 && $i < ( count( $types ) -1 ); $bytes /= 1024, $i++ ); return( round( $bytes, 2 ) . " " . $types[$i] ); } ?>