不能使用带有PHP exec()函数的foreach循环?

时间:2011-01-18 02:25:53

标签: php foreach exec

我正在尝试找出磁盘卷名。我的代码是:

$diskVolume = array('m','r');
foreach ($diskVolume as $volume) {
    echo $volume.' ';
    $cmd = 'fsutil fsinfo volumeinfo '.$volume.':';
    exec( $cmd,$getVolumeName);            
    echo $getVolumeName[0].'<br /> ';
}

但我的代码似乎只有第一项 m的音量名称而无法获得 r 。换句话说,循环只获取第一项的信息。 ,

非常感谢!!

有关fsutil的信息: fsutil

2 个答案:

答案 0 :(得分:0)

exec第二个参数通过引用接受数组:

  

string exec(string $ command [,array&amp; $ output [,int&amp; $ return_var]])

如果$output已经是一个数组,它将不会重新初始化数组,而是追加到它。每个例子:

$output = array('foo');
exec('who', $output);
var_dump($output);

收率:

array(2) {
  [0]=>
  string(3) "foo"
  [1]=>
  string(43) "netcoder tty7         2011-01-17 17:52 (:0)"
}

改为自己重新初始化:

$diskVolume = array('m','r');
foreach ($diskVolume as $volume) {
    $getVolumeName = null; // reinitialize here
    echo $volume.' ';
    $cmd = 'fsutil fsinfo volumeinfo '.$volume.':';
    exec( $cmd,$getVolumeName);            
    echo $getVolumeName[0].'<br /> ';
}

答案 1 :(得分:0)

<?php
$diskVolume = array('m','r');
foreach ($diskVolume as $volume) {
    echo $volume."\n";
    $cmd = 'echo '.$volume;
    exec($cmd,$getVolumeName);            
}
echo print_r($getVolumeName, true)."\n\n";

上面的代码执行这两个命令,并在结尾处将BOTH命令的结果作为SINGLE数组输出。您只是查看数组中的第一个条目,但exec传递给它的输出变量CONCATENATES到现有数组上,如果您传递的变量已经有值。

http://php.net/manual/en/function.exec.php