【问题标题】:How to maipulate the shell output in php如何在php中操作shell输出
【发布时间】:2010-05-27 03:21:45
【问题描述】:

我正在尝试编写 php 脚本来执行一些 shell 功能,例如报告。 所以我从磁盘使用报告开始

我想要以下格式

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

没有别的

我的脚本是

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

它的输出如下所示

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

如何将该输出转换为我的格式化输出

【问题讨论】:

    标签: php linux shell


    【解决方案1】:

    类似这样的:

    // 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>";
    

    无论如何都应该让你去

    【讨论】:

      【解决方案2】:

      为什么不改用 PHP 的 disk_total_space()disk_free_space() 函数呢?否则,一种方法是您可以使用 preg_ 函数将 $output 解析为多维数组,将“g”、“k”、“m”字符转换为数字,并对列进行总计。或者,如果列空间是单个制表符或一定数量的空格,您可以将每一行 explode() 放入一个多维数组中。

      【讨论】:

      • +1 可能不是 OP 想要的,但恕我直言,这是一个更好的解决方案,可以使用 PHP 的内置函数,而不是滚动您自己定制的解决方案(并使用 shell_exec() ;))
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-09-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-10-01
      相关资源
      最近更新 更多