Как получить ответы об ошибках PHP exec ()? - PullRequest
27 голосов
/ 06 декабря 2008

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

exec('ln -s ' . PLUGIN_DIR . '/.htaccess ' . ABSPATH . '/.htaccess');

Когда вы добавляете die () в конце, он обнаруживает ошибку:

exec('ln -s ' . PLUGIN_DIR . '/.htaccess ' . ABSPATH . '/.htaccess') or die('what?!');

Для приведенного выше оператора exec () проблема связана с правами доступа, но PHP ее не отображает. Как вы отображаете из PHP, какая ошибка происходит?

Ответы [ 7 ]

19 голосов
/ 06 декабря 2008

Результат вывода функции exec можно получить, передав необязательный второй параметр:

exec('ln -s ' . PLUGIN_DIR . '/.htaccess ' . ABSPATH . '/.htaccess',$output);
var_dump($output);
13 голосов
/ 07 июня 2014

Параметр $ output не работает, если вызывающая программа выплевывает вывод в STDERR.

Лучший способ справиться с этим - перенаправить вывод из exec в файл и затем отобразить содержимое этого файла в случае возникновения ошибки.

Если $ cmd содержит команду exec, добавьте что-то вроде этого:

$cmd.=" > $error_log 2>&1"

Затем проверьте содержимое спецификации файла в $ error_log для получения подробной информации о том, почему команда завершилась неудачно.

Также обратите внимание, что если вы отключите это с помощью & в конце команды, немедленная проверка содержимого $ error_log может не раскрыть информацию журнала - скрипт может проверить / обработать файл до завершения работы ОС .

11 голосов
/ 27 октября 2016

Следующий код будет захватывать как нормальный вывод (из StdOut), так и вывод ошибок (из SdtErr).

exec('ln -s ' . PLUGIN_DIR . '/.htaccess ' . ABSPATH . '/.htaccess' . '2>&1',$output);
var_dump($output);
7 голосов
/ 08 ноября 2015

это сработало для меня: Добавьте 2> & 1 в конец вашей команды.

Видно здесь: php exec () не возвращает сообщение об ошибке на выходе при выполнении команды svn

Приветствия

6 голосов
/ 13 апреля 2017

Это сработало для меня в нескольких сценариях:

 ob_start();
 exec($cmd . " 2>&1", $output);
 $result = ob_get_contents();
 ob_end_clean();
 var_dump($result);

Пробел между "2 важен

3 голосов
/ 02 декабря 2012

Если вы не нашли ошибку с помощью этого второго параметра, вы можете найти журнал ошибок apache, например, в Ubuntu Server 12.10 с помощью команды $ tail /var/log/apache2/error.log Я запускал скрипт phthon от php, ошибка которого была напечатана только там, и, следовательно, я смог его диагностировать. С наилучшими пожеланиями.

1 голос
/ 18 июля 2018

Это не является прямым ответом на ваш вопрос, но очень полезно, если вы хотите узнать, что именно произошло по возвращенному коду ошибки.

Если код ошибки ($ res), возвращается командой:

exec('command', $out, $res);

было в диапазоне 1-2, 126-165, 255, чем было возвращено оболочкой (например, BASH), вызванной из PHP (для выполнения вашей команды). Если возвращенный код не находится в этом диапазоне, то он был возвращен вашей командой (не оболочкой).

См. (Описание кодов ошибок BASH)

https://www.linuxtopia.org/online_books/advanced_bash_scripting_guide/exitcodes.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...