Ниже приведен пример без трубы. Это возвращает ожидаемое сообщение об ошибке.
<?php
$exec_output = array();
$exec_return_var = 0;
@exec('lame --unsupported 2>&1', $exec_output, $exec_return_var);
if ($exec_return_var != 0)
echo 'Error: ' . implode('<br>', $exec_output);
Ошибка: lame: нераспознанная опция — не поддерживается
Но как получить оба сообщения об ошибках с двумя командами, разделенными с помощью канала? В приведенном ниже примере я получаю только сообщение об ошибке от второй команды.
<?php
$exec_output = array();
$exec_return_var = 0;
@exec('flac --unsupported 2>&1 | lame --unsupported 2>&1', $exec_output, $exec_return_var);
if ($exec_return_var != 0)
echo 'Error: ' . implode('<br>', $exec_output);
Ошибка: lame: нераспознанная опция —unsupported
Задача ещё не решена.
Других решений пока нет …