Как выполнить скрипт perl в php и перехватить сообщения об ошибках? - PullRequest
1 голос
/ 21 апреля 2010

Я пытаюсь выполнить скрипт Perl следующим образом:

/usr/bin/ec2-consistent-snapshot 'vol-dr3131c2'

Когда скрипт Perl завершается неудачно, он завершается с помощью команды die и выводит сообщение об ошибке. Я вижу это сообщение об ошибке при выполнении вручную, но мне не удается перехватить его через PHP.

Я попробовал следующее безуспешно:

exec($command,$output);
echo system($command,$output);
passthru($command);

Есть идеи?

Ответы [ 4 ]

2 голосов
/ 21 апреля 2010

Вы можете попробовать:

$command = "/usr/bin/ec2-consistent-snapshot 'vol-dr3131c2' > /tmp/exec.out 2>&1"
exec($command)
echo file_get_contents('/tmp/exec.out');

'> /tmp/exec.out 2> & 1' перенаправляет весь вывод в /tmp/exec.out, затем PHP возвращает файл обратно.

0 голосов
/ 21 апреля 2010

Сценарии Perl умирают, их сообщения отправляются в stderr, поэтому вам нужно будет захватить как stderr, так и stdout, чтобы увидеть, что произошло.

0 голосов
/ 21 апреля 2010

В первом примере, приведенном в документации для функции system () , упоминается, что она может работать в тех случаях, когда php не получает вывод. Пример получает stderr отдельно от stdout, без использования временного файла. Постер не объясняет, почему этот метод был бы успешным, когда system () нет. Так что нет ответа на основную проблему, но, возможно, обходной путь.

0 голосов
/ 21 апреля 2010

Разве у PHP нет обратных галочек?

$output = `$command 2> /tmp/command.err`;
if (looks_like_command_failed($output)) {
    $error_message = file_get_contents('/tmp/command.err');
}
...