У меня есть класс PHP, который должен запускать основной Java как отдельный процесс.
Выполнение должно быть синхронным, и после его завершения я должен прочитать stderr для обработки и регистрации потенциальных ошибок.
Я вижу, что наиболее популярными методами для запуска отдельных процессов из PHP являются exec () и proc_open ().
Однако я не понимаю, что мне следует использовать и как.
Exec (), будучи синхронным и очень простым в использовании, должен быть лучшим выбором для меня. Однако из того, что я вижу здесь, на StackOverflow: PHP StdErr после Exec (), кажется, что единственный способ получить stderr — это явно создать для него файл. Это не кажется мне элегантным решением.
На очереди, proc_open кажется действительно мощным инструментом, и он позволяет прямой, отдельный доступ к stdin, stdout и stderr.
Для того, что мне нужно сделать, код должен выглядеть примерно так:
$proc = proc_open($cmd,[2 => ['pipe','w']],$pipes);
$stderr = stream_get_contents($pipes[2]);
fclose($pipes[2]);
proc_close($proc);
$error = var_dump($stderr)
Проблема в том, что proc_open асинхронный, поэтому, если я правильно понял, я не могу быть уверен, что при запуске stream_get_contents я получу какое-либо соответствующее сообщение (ошибки могут появиться позже!).
Что я должен делать?
Задача ещё не решена.
Других решений пока нет …