Как игнорировать ошибки в shell exec?


Я получаю вывод команды оболочки на PHP в виде

$str = shell_exec("command");

И запустите PHP-скрипт в терминале. Когда shell command вернет ошибку, она будет напечатана на терминале. Как я могу сказать shell_exec возвращать только вывод команды без вывода ошибок?

Author: Googlebot, 2017-05-26

3 answers

Вам просто нужно отменить вывод ошибок, перенаправив stderr на /dev/null

$str = shell_exec("command 2>/dev/null");

Безошибочный вывод - stdout - будет сохранен в $str, как и раньше.


Обратите внимание, что вам не нужно подавлять ошибки в shell_exec с помощью оператора @ или оборачивать его в try-catch блок, так как shell_exec не завершается ошибкой (у вас нет ошибки во время выполнения PHP).

Именно команда, которую требуется выполнить, может привести к ошибкам, описанный выше подход будет подавлять ошибки в результат.

Также some-command > /dev/null 2>&1, как и другие предложенные , это не то, что вы хотите (если я правильно понял ваш вопрос), поскольку это отбросит как ошибку, так и вывод без ошибок .


A Заключительное примечание : вы можете решить поймать/отбросить stdout и/или stderr.

Конечно, вы должны полагаться на тот факт, что команда, которую вы запускаете, отправляет регулярные выходные данные в stdout и ошибки в stderr. Если команда не соответствует стандарту (например, отправляет все для stdout) тебе не повезло.

 3
Author: Paolo, 2018-01-10 19:57:17

Если вы хотите игнорировать ошибки своей команды, вам нужно изменить свою команду, чтобы перенаправлять ошибки следующим образом:

some-command > /dev/null 2>&1
 0
Author: Zhihua Lai, 2017-05-26 13:39:52

Вы также можете сделать это в начале своего кода:

ini_set( 'display_errors', 0 );
error_reporting( E_ALL );

Если вы установите 0, вы не увидите ошибок, если вы установите 1, вы увидите все ошибки

 -1
Author: nacho, 2017-05-26 12:54:23