tags:

views:

54

answers:

2

I am trying to write php script which does some shell functions like reporting. So i am starting with diskusage report

I want in following format

drive path ------------total-size --------free-space

Nothing else

My script is

$output = shell_exec('df -h -T');
echo "<pre>$output</pre>";

and its ouput is like below

Filesystem    Type    Size  Used Avail Use% Mounted on
/dev/sda6     ext3     92G  6.6G   81G   8% /
none      devtmpfs    3.9G  216K  3.9G   1% /dev
none         tmpfs    4.0G  176K  4.0G   1% /dev/shm
none         tmpfs    4.0G  1.1M  4.0G   1% /var/run
none         tmpfs    4.0G     0  4.0G   0% /var/lock
none         tmpfs    4.0G     0  4.0G   0% /lib/init/rw
/dev/sdb1     ext3    459G  232G  204G  54% /media/Server
/dev/sdb2  fuseblk    466G  254G  212G  55% /media/BACKUPS
/dev/sda5  fuseblk    738G  243G  495G  33% /media/virtual_machines

How can i convert that ouput into my forn\matted output

+1  A: 

Why not use PHP's disk_total_space() and disk_free_space() functions instead? Otherwise, one way is you could parse $output into a multidimensional array using preg_ functions, convert 'g', 'k', 'm' characters to numbers, and total the column. Alternatively, if the column space is a single tab character or a set number of spaces, you could just explode() each line into a multidimensional array.

bob_the_destroyer
+2  A: 

Something like this:

// Use awk to pull out the columns you actually want
$output = shell_exec('df -h -T | awk \'{print $1 " " $3 " " $5}\'');
// Split the result into an array by lines (removing the final linefeed)
$drives = split("[\r|\n]", trim($output));
// Chuck away the unused first line
array_shift($drives);

echo "<pre>drive path\ttotal-size\tfree-space\n";

foreach($drives as $drive) {
    // Explode the individual lines to get the values
    $values = explode(" ", $drive);
    echo $values[0], "\t", $values[1], "\t", $values[2], "\n";
}

echo "</pre>";

Should get you going anyway

Mike
thanks buddy that worked
Mirage