Я все еще новичок в PHP, поэтому прости меня, если я упустил что-то очевидное здесь.
Итак, я вызываю некоторые серверные сценарии, которые производят строки текста, и я подумал, что мне придется поработать с exec
, чтобы убедиться, что он работает правильно. Конечно, в оболочке (Linux) простая многострочная команда вывода выглядит примерно так:
echo a;echo b;echo c
, что, конечно, дает то, что можно ожидать:
a
b
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.