Process クラス コンポーネントは、proc_open でコマンドを実行します。
このパッケージを書き直して 2 つのパッケージに分割します。
これらのクラスをご利用ください。このパッケージを使用する代わりに。
このパッケージは、複雑なコンポーザー パッケージではなく、単一ファイルとして使用することを目的としています。
<?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 );
→ 続きを読む 使用例
composer require takuya/process
プロセスは読み取り/書き込み用にバッファリングされた IO を返します
メソッドはストリームを返します。
<?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 );
<?php
$ proc = new Process ( ' sh sleep.sh ' );
$ proc -> start ();
echo ' started ' ;
$ proc -> join ();
Process#pipe() はプログラムを PIPE できます。
暗黙的な接続パイプ stdout -> stdin
<?php
$ proc = new Process ([ ' echo ' , ' HelloWorld ' ]);
$ fd_out = $ proc -> pipe ( ' cat ' )
-> pipe ( ' cat ' )
-> pipe ( ' cat ' )
-> pipe ( ' cat ' )
-> wait ();
明示的にパイプして、(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 ();
注意: 長時間のロックを回避し、2 つのプロセスを並行して実行するために、最初に$proc2->wait()
を呼び出します。その理由は、 Process
クラスがwait
で暗黙の IOBuffering を採用しているため、 calling wait()
、プロセスが終了するまでストリーム バッファリング ループが実行されることになります。
追加のパッケージは必要ありません。
単一ファイルsrc/Process.php
使用する必要があります。このようにrequire_onceと書くだけです。
<?php
require_once ' src/Process.php ' ;
このProcess class
vanilla phpによって書かれています。余分なパッケージはありません。 pear、composer、その他のパッケージをインストールする必要はありません。
これをcomposer.phar
や他のパッケージマネージャーなしで使用すると、必要なのはrequire_onceと書くだけです。
詳細な使用法、この procjet /samples
、 /tests/Features
、および./docs
内のファイルを読み取ります。