takuya / process
php proc_open wrapper class for shell command process management.
Installs: 6 901
Dependents: 7
Suggesters: 0
Security: 0
Stars: 6
Watchers: 3
Forks: 5
Open Issues: 5
Requires
- php: >=7.2
Requires (Dev)
- phpunit/phpunit: ^8.0
This package is auto-updated.
Last update: 2024-10-19 11:32:09 UTC
README
The Process class component executes command in proc_open.
Sample
<?php $proc1 = new Process('sh'); $fd_out = $proc1->setInput('echo HelloWorld') ->pipe('cat') ->pipe('cat') ->pipe(['grep', 'Hello']) ->wait(); $ret = stream_get_contents($fd_out);
Installation
composer require takuya/process
Features
Buffered IO stream for STDOUT/STDERR
Process will return buffered IO for read/write
Method will return stream.
<?php $proc = new Process(['echo', 'HelloWorld']); $fd_out = $proc->run(); $output = stream_get_contents($fd_out); // you can reuse, re-read output fseek($fd_out,0); $str = stream_get_contents($fd_out);
Pseudo-thread style programming
<?php $proc = new Process('sh sleep.sh'); $proc->start(); echo 'started'; $proc->join();
Chain Method for Pipe Command
Process#pipe() can PIPE programs.
Implicite connect pipe stdout -> stdin
<?php $proc = new Process(['echo', 'HelloWorld']); $fd_out = $proc->pipe('cat') ->pipe('cat') ->pipe('cat') ->pipe('cat') ->wait();
Explicitly Pipe, connect (Proc1#)stdout -> (Proc2#)stdin
<?php $proc1 = new Process(['echo', 'HelloWorld']); $proc2 = new Process(['cat']); [$p1_out,$p1_err] = $proc1->start(); $proc2->setInput($p1_out); $proc2->start(); $proc2->wait(); $proc1->wait();
Notice: $proc2->wait()
call first, to avoid long locking , to run two process in parallel.
The reason is Process
class adopt implied IOBuffering at wait
, so calling wait()
means that runs stream buffering loop until process end.
A Simple way, Only Single File for use.
No extra packages required.
A Single File src/Process.php
need to use. just write require_once like this.
<?php require_once 'src/Process.php';
This Process class
is written by vanilla php. No extra packages. No pear, No composer, No other packages need to install.
Using this without composer.phar
or other Package manager, all you need is Just write require_once.
More Samples
More Usage , Read files in this procjet /samples
, /tests/Features
and ./docs
.