it-swarm.com.ru

Как получить PHP exec () ответы об ошибках?

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

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

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

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

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

23
Matt

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

exec('ln -s ' . PLUGIN_DIR . '/.htaccess ' . ABSPATH . '/.htaccess',$output);
var_dump($output);
17
Eran Galperin

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

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

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

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

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

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

12
S.ov

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

exec('ln -s ' . PLUGIN_DIR . '/.htaccess ' . ABSPATH . '/.htaccess' . '2>&1',$output);
var_dump($output);
9
Amaynut

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

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

Ура

7
luciomonter

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

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

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

5
Bonfix Fixer Ngetich

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

3
David L

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

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

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

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

Смотрите (для описания кода ошибки BASH)

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

0
maximusin9