2011-08-26 5 views
-1

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

+1

не может воспроизвести. Запуск вашего точного кода производит только 3 элемента в '$ output' – Phil

+0

То есть ... совершенно странно. –

+0

Ваш первый код выводит только то, что он должен –

ответ

5

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

Смежные вопросы