Не можете использовать цикл foreach с функцией PHP exec ()? - PullRequest
1 голос
/ 18 января 2011

Я пытаюсь узнать имя тома диска. И мой код:

$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 голосов
/ 18 января 2011
<?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";

Приведенный выше код выполняет обе команды и выводит результаты ОБА команд в виде ЕДИНОГО массива в конце. Вы просматривали только первую запись в массиве, но exec с выходной переменной, переданной ему, CONCATENATES на существующий массив, если передаваемая переменная уже имеет значение.

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

0 голосов
/ 18 января 2011

exec второй аргумент принимает массив по ссылке:

string exec (строка $ command [, array & $ output [, int & $ 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 /> ';
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...