2008年1月27日日曜日

PHPで 外部プログラム(CUI)と対話的に処理を進める方法

PHPで外部のコマンドラインプログラムを実行し、標準入力によるデータの入力や標準出力からのデータの受取りをしながら、対話的に処理を進める方法。

関数 proc_open() を使う。
<?php
$inout = array(
  0 => array('pipe', 'r') //標準入力 ('pipe' or 'file')
 , 1 => array('pipe', 'w') //標準出力 ('pipe' or 'file')
 , 2 => array('file', '/tmp/proc_open_error.log', 'a') //エラー出力 ('pipe' or 'file')
);

$proc = proc_open('php', $inout, $pipes); //外部プログラムとしてphpを実行する場合

if (is_resource($proc)) {
 fwrite($pipes[0], '<?php echo "Hello proc_open()!"; ?>'); //標準入力として渡す文字列
 fclose($pipes[0]);

 echo stream_get_contents($pipes[1]); //標準出力から受け取る
 fclose($pipes[1]);

 echo 'return value = ' . proc_close($proc);
 //参考:proc_close()の前に全てのpipeを閉じる必要があるらしい
}

参考: PHP: proc_open - Manual

0 件のコメント:

コメントを投稿