proc_openの使い方をまとめてみた。色々使い方はあるようだが、管理人は難しいことは嫌いである。
ここでは、主な使い方等について触れていく。
手順はdescriptorspecといった形で、入出力とエラー出力の指定をする。0
$descriptorspec = array(
0 => array("pipe", "r"), //<-stdin。子プロセスが読み込むパイプ
1 => array("pipe", "w"), //<-stdout。子プロセスが書きこむパイプ
2 => array("file", "error-output.txt", "a") //エラー出力先の指定
);
$process = ('実行するもののある所のパス',$descriptorspec,$pipes);
if(is_resource($process)) {
// $pipes[0]->子プロセスのstdinに繋がれた書き込み可能なハンドル
// $pipes[1]->子プロセスの stdout に繋がれた読み込み可能なハンドル
fwrite($pipes[0],'書きたいもの');
fclose($pipes[0]);
$result = stream_get_contents($pipes[1]);
/*上の1行に変わる文字列読み込みの方法としてはこんな方法も
while(!feof($pipes[1])){
$result .= fread($pipes[1], 4096);
}*/
fclose($pipes[1]);
proc_close($process); //デッドロック防止のためproc_closeを呼び出す前にはすべてのパイプを閉じること
}
とすると、$resultに子プロセスの処理をしたときの結果が格納されている。echo $result等で確認可能。
最終更新:2011年04月03日 12:45