両方とも同一の php://temp
に出力させ、 process_close()
したあとに rewind()
でファイルポインタを先頭に戻して stream_get_contents()
で読み込む。
<?php $command = ['sh', '-c', 'echo hoge; echo fuga >&2']; // 実行したいコマンド $fp = fopen('php://temp', 'w+'); $descriptorSpec = [ 1 => $fp, // ファイルディスクリプタ番号 1 = 標準出力 2 => $fp, // ファイルディスクリプタ番号 2 = 標準エラー出力 ]; $process = proc_open($command, $descriptorSpec, $_); if ($process === false) { throw new RuntimeException('cannot open process'); } $exitCode = proc_close($process); rewind($fp); $out = stream_get_contents($fp); echo $exitCode . PHP_EOL; echo $out;
実行結果
0 hoge fuga