PHP: странность exec - PullRequest
       12

PHP: странность exec

2 голосов
/ 23 марта 2011

Это мой код:

        $command = 'path to some script';
        echo "Running command:\n $command ";
        $result = array ();
        exec ($command, $result);

Что приводит к следующему:

Рабочая команда:
[здесь идет предупреждение, напечатанное самой командой]
путь к какому-либо сценарию

т.е. вывод ошибки скрипта каким-то образом вставляется в середину (!) команды echo, предшествующей ему.

Идеи

Ответы [ 2 ]

4 голосов
/ 23 марта 2011

Это будет до буферизованного против небуферизованного ввода-вывода. Вывод ошибки будет stderror, а другим будет stdout. Stdout обычно буферизуется - поэтому, если вы заставите его сбросить перед запуском скрипта, вы получите желаемый результат.

Попробуйте это http://php.net/manual/en/function.flush.php

1 голос
/ 24 марта 2011

Это потому, что exec не фиксирует стандартную ошибку ( stderr ), например:

exec ('/bin/echo foo > /dev/stderr', $result);

Выводит foo, хотя exec не должно ничего выводить. Вы можете заставить это сделать:

exec ($command.' 2>&1', $result);

Причина, по которой он появляется посередине, вероятно, из-за буферизации вывода (как объяснил @Danny выше). Выходной буфер может исчерпаться до конца команды и поэтому автоматически очищается, и запускается новый. Следовательно ошибка появляется в середине.

...