- исходящий поток
- входящий поток
Исходнящий поток
В Symfony 3.1, класс Process реализует интерфейс PHP IteratorAggregate для возврата итератора для вывода запущенных процессов. Ключ возвращаемого значения является типом вывода (Process :: OUT или Process :: ERR) и значение вывода генерируется процессом.
Эта новая функция позволяет транслировать вывод так же легко, с помощью конструкции foreach()
:
use Symfony\Component\Process\Process; $process = new Process('ls -lsa'); $process->start(); foreach ($process as $type => $data) { if ($process::OUT === $type) { echo $data."\n"; } else { echo "[ERR] ".$data."\n"; } }
Входящий поток
Также компонент Process добавляет в Symfony 3.1 новый класс InputStream, реализующий передачу данных в стандартный входящий поток, в процессе его работы. Традиционно вы использовали метод setInput (), чтобы получить данные:
use Symfony\Component\Process\Process; $process = new Process('cat'); $process->setInput('file.txt'); $process->run();
В этом примере, после того, как данные были полностью записаны на стандартный ввод подпроцесса, связанный с ним pipe закрывается и вы не можете больше подключиться к входному потоку. Новый InputStream позволяет обойти это ограничение:
use Symfony\Component\Process\InputStream; $input = new InputStream(); $input->write('foo'); $process = new Process('my_script'); $process->setInput($input); $process->start(); // ... read process output or do other things $input->write('bar'); // ... read process output or do other things $input->write('qux'); $input->close(); // ...
Вы можете предоставить больше чем один ввод в случае необходимости во время выполнения процесса. Метод write()
принимает скаляры, потоки ресурсов или Traversable объекты в качестве аргумента. Когда вы закончите писать на стандартный ввод, просто вызовите метод close()
.
Источник: http://symfony.com/blog/new-in-symfony-3-1-input-and-output-stream-for-processes