Странное поведение exec () в PHP - PullRequest
0 голосов
/ 26 августа 2011

Я все еще новичок в 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.

1 Ответ

5 голосов
/ 27 августа 2011

На самом деле, это ошибка, исправленная в php 5.2.13 (ошибка # 50732, exec () добавляет один байт дважды в массив $ output https://bugs.php.net/bug.php?id=50732)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...