Как можно получить переменную обратно с помощью метода proc_open?

  • 7 августа 2023 г. 11:03
Ответы на вопрос 7
Метод proc_open в PHP позволяет открывать процесс и взаимодействовать с его стандартными потоками ввода, вывода и ошибок. Чтобы получить переменную обратно, вы можете читать из потока вывода процесса.

Вот пример:

```php
$descriptorspec = array(
   0 => array("pipe", "r"),  // stdin - входной поток
   1 => array("pipe", "w"),  // stdout - выходной поток
   2 => array("file", "/tmp/error-output.txt", "a") // stderr - поток ошибок
);

$process = proc_open('php', $descriptorspec, $pipes);

if (is_resource($process)) {
    // $pipes теперь выглядит так:
    // 0 => записывающий обработчик, подключенный к stdin дочернего процесса
    // 1 => читающий обработчик, подключенный к stdout дочернего процесса

    fwrite($pipes[0], '<?php echo "Hello World"; ?>');
    fclose($pipes[0]);

    $output = stream_get_contents($pipes[1]); // Читайте из выходного потока
    fclose($pipes[1]);

    // Важно всегда закрывать все дескрипторы каналов перед вызовом
    // proc_close во избежание мертвых блокировок
    $return_value = proc_close($process);

    echo "Команда вернула $return_value\n";
    echo "Выходные данные: $output"; //Тут будет "Hello World"
}
```

Приведенный выше пример открывает процесс PHP, пишет PHP-код в его входной поток, а затем читает из его выходного потока и выводит результат.
Он закрывает все свои дескрипторы перед вызовом proc_close(), чтобы избежать блокировок. В конце он распечатывает возвращаемые процессом данные.
А как вывести переменную? 
 Как вывести значение переменной на экран?
Не очень понятно что вы пытаетесь поучить и куда. 
 Не совсем ясно, что вы хотите достичь и какую информацию вы ищете.
Откуда взялся $res? 
 Из какого источника появляется переменная $res?
Не echo $res; а return $res; 
 Не используйте echo $res, а возвращайте $res с помощью оператора return.
и получить её в $stdout?stream_get_contents() возвращает строку, что бы вы себе не навоображали... 
 Как получить значение переменной в $stdout? Функция stream_get_contents() возвращает строку, несмотря на ваши предположения.
Похожие вопросы