Это потому, что exec
не фиксирует стандартную ошибку ( stderr ), например:
exec ('/bin/echo foo > /dev/stderr', $result);
Выводит foo
, хотя exec
не должно ничего выводить. Вы можете заставить это сделать:
exec ($command.' 2>&1', $result);
Причина, по которой он появляется посередине, вероятно, из-за буферизации вывода (как объяснил @Danny выше). Выходной буфер может исчерпаться до конца команды и поэтому автоматически очищается, и запускается новый. Следовательно ошибка появляется в середине.