• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:PHP5の外部コマンド実行で、バッチファイルのエラーレベル値と標準出力(標準エラー?)の3つを取得できる関数はありますか?)

PHP5の外部コマンド実行で、バッチファイルのエラーレベル値と標準出力を取得する関数

このQ&Aのポイント
  • PHP5のWindows版で外部コマンドを実行し、バッチファイルのエラーレベル値と標準出力を取得する関数があるかどうか確認しています。
  • 例えば、test.cmdというバッチファイルを実行した結果のエラーレベル値や標準出力を取得したい場合、どのような方法で取得すればいいのか知りたいです。
  • 関数の戻り値でエラーレベル値や標準出力を取得できれば、それを利用して後続の処理を行いたいです。

質問者が選んだベストアンサー

  • ベストアンサー
  • mtaka2
  • ベストアンサー率73% (867/1179)
回答No.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 はパイプにする必要はありませんが、 入力待ちになって呼び出したプログラムが止まってしまうのを防ぐため、パイプにした上で何も入れずに閉じてます。

関連するQ&A