Я все еще новичок в PHP, так что простите меня, если я пропущу что-то очевидное здесь.Необычное поведение exec() в PHP
Итак, я вызываю некоторые внутренние скрипты, которые производят строки текста, и я думал, что буду возиться с exec
, чтобы убедиться, что он работает правильно. Конечно, в (Linux) оболочки, легкая команда многострочный вывод что-то вроде
echo a;echo b;echo c
, который, конечно, производит то, что можно было бы ожидать:
a
b
c
Итак, почему я получаю сообщение об дополнительный «c», когда я запускаю exec
ниже?
вход:
exec("echo a;echo b;echo c",$output,$return);
echo("return: $return\n");
echo("count: ". count($output) . "\n");
foreach($output as $i)
{print "$i\n";}
var_dump($output);
выход:
return: 0
count: 4
a
b
c
c
array(4) {
[0]=>
string(1) "a"
[1]=>
string(1) "b"
[2]=>
string(1) "c"
[3]=>
string(1) "c"
}
Теперь я знаю, что exec
возвращает последнюю строку обработанной, но я не эхо возвращаемого значения exec
. И то, что делает это еще более загадочным является то, что если я струны немного более «случайным», кажется, правильно работать:
jmaney> php -r 'exec("echo asfd;echo asdfasf;echo grrrr",$output,$return);echo("return: $return\n");echo("count: ". count($output) . "\n");foreach($output as $i){print "$i\n";}var_dump($output);'
return: 0
count: 3
asfd
asdfasf
grrrr
array(3) {
[0]=>
string(4) "asfd"
[1]=>
string(7) "asdfasf"
[2]=>
string(5) "grrrr"
}
Что я здесь отсутствует?
Отредактировано для добавления: Я запускаю версию оболочки bash 3.2.48, SUSE Enterprise Linux версии 11, Linux Kernel версии 2.6 и PHP версии 5.2.12.
не может воспроизвести. Запуск вашего точного кода производит только 3 элемента в '$ output' – Phil
То есть ... совершенно странно. –
Ваш первый код выводит только то, что он должен –