Получение ошибки в proc_open

Николай83

Новичок
Здравствуйте.
Есть метод:

Код:
    private function run($cmd, $input) : string
    {
        $descriptorspec = [
            0 => ["pipe", "r"],
            1 => ["pipe", "w"],
            2 => ["pipe", "w"]
        ];

        $process = proc_open($cmd, $descriptorspec, $pipes);

        if (is_resource($process)) {

            fwrite($pipes[0], $input);
            fclose($pipes[0]);

            $result = stream_get_contents($pipes[1]);
            fclose($pipes[1]);

            $error = stream_get_contents($pipes[2]);
            fclose($pipes[2]);

            proc_close($process);

            if (!empty($error)) {
                throw new SslCertificateException($error);
            }

            return $result;
        }

        return null;
    }
В нём выполняются команды вида openssl.... Проблема в том, что в одном окружении все Ок, а на другом переменная $error всегда пустая, даже если ошибка (если ошибка, то текст ошибки оказывается в $result. Т.е. метод работает не как ожидалось).
Не подскажете в чём дело? Спасибо.
 

AnrDaemon

Продвинутый новичок
Какой именно текст ошибки и в каком окружении?
Без информации ответов не будет.
 

fixxxer

К.О.
Партнер клуба
А есть уверенность, что выполняемая команда на данном сервере выводит ошибки именно в stderr, а не в stdout? Если просто в шелле запустить, без php?
 

AnrDaemon

Продвинутый новичок
Он код ошибки поймать не может, а не текст, судя по вопросу.
 

WMix

герр M:)ller
Партнер клуба
ну да, но если ошибки нет, а есть только вывод ошибки в stdout и exit(0) то че?
 

WMix

герр M:)ller
Партнер клуба
Проблема в том, что в одном окружении все Ок, а на другом переменная $error всегда пустая, даже если ошибка (если ошибка, то текст ошибки оказывается в $result. Т.е. метод работает не как ожидалось).
 

AnrDaemon

Продвинутый новичок
И тебя не смущает, что товарищ всячески избегает упоминать, что именно это за окружение?
 

fixxxer

К.О.
Партнер клуба
Думаешь, windows? :)

Кстати говоря, если уж вопрос про openssl, то имеет смысл не exec-ать, а http://php.net/openssl
Там, конечно, врапперы далеко не на все функции реализованы, но самое ходовое есть.
 

Николай83

Новичок
А есть уверенность, что выполняемая команда на данном сервере выводит ошибки именно в stderr, а не в stdout? Если просто в шелле запустить, без php?
Да верно. В одном случае ошибка выводится в stderr как надо. А во втором та же ошибка идёт в stdout. Я правильно понимаю что с этим уже ничего не сделать?
 

WMix

герр M:)ller
Партнер клуба
ну если удаленный сервис это ошбкой не считает, то зачем чтото делать?
 

WMix

герр M:)ller
Партнер клуба
кстати какой $cmd у тебя? для "разных версий"
 

WMix

герр M:)ller
Партнер клуба
спроси на всякий у "неработающего"
Код:
type openssl
 
Сверху