- ベストアンサー
PHP5の外部コマンド実行で、バッチファイルのエラーレベル値と標準出力を取得する関数
- PHP5のWindows版で外部コマンドを実行し、バッチファイルのエラーレベル値と標準出力を取得する関数があるかどうか確認しています。
- 例えば、test.cmdというバッチファイルを実行した結果のエラーレベル値や標準出力を取得したい場合、どのような方法で取得すればいいのか知りたいです。
- 関数の戻り値でエラーレベル値や標準出力を取得できれば、それを利用して後続の処理を行いたいです。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
1関数で行うそのものズバリな関数はありませんが、 proc_open/proc_close と pipe を使うことで実現できます。 http://php.net/manual/ja/function.proc-open.php コードにするとこんな感じでしょうか。 --- <?php list($ret, $stdout, $stderr) = process("test.cmd"); print "ret=$ret\n"; print "stdout=$stdout\n"; print "stderr=$stderr\n"; function process($cmd) { $result_code = -1; $result_stdout = ''; $result_stderr = ''; $descriptorspec = array( 0 => array("pipe", "r"), // 0=STDIN 1 => array("pipe", "w"), // 1=STDOUT 2 => array("pipe", "w") // 2=STDERR ); $process = proc_open($cmd, $descriptorspec, $pipes); if (is_resource($process)) { fclose($pipes[0]); $result_stdout = stream_get_contents($pipes[1]); fclose($pipes[1]); $result_stderr = stream_get_contents($pipes[2]); fclose($pipes[2]); $result_code = proc_close($process); } return array($result_code, $result_stdout, $result_stderr); } ?> --- stdin はパイプにする必要はありませんが、 入力待ちになって呼び出したプログラムが止まってしまうのを防ぐため、パイプにした上で何も入れずに閉じてます。