1. ホーム
  2. php

[解決済み] proc_open() の出力を取得する方法

2022-02-17 12:25:44

質問

から出力を得ようとしました。 proc_open というメソッドがあるのですが、それを印刷すると空っぽになります。

$descriptorspec = array(
    0 => array("pipe", "r"),
    1 => array("pipe", "w"),
    2 => array("file", "files/temp/error-output.txt", "a")
);

プロセス = proc_open("time ./a a.out", $descriptorspec, $pipes, $cwd);

での出力は、私が知る限りでは stream_get_contents()

echo stream_get_contents($pipes[1]);
fclose($pipes[1])。

でも、そんなことはできない...。 何かご提案ありますか?

Thx before...

どのように解決するのですか?

あなたのコードは多かれ少なかれ私のために動作します。 time に出力を出力します。 stderr ということで、その出力を探しているのであれば、ファイルの中を探してみてください。 files/temp/error-output.txt . があります。 stdout パイプ $pipes[1] は、プログラムの出力のみが含まれます ./a .

私の再現。

[edan@edan tmp]$ cat proc.php 

<?php

$cwd='/tmp';
$descriptorspec = array(
    0 => array("pipe", "r"),
    1 => array("pipe", "w"),
    2 => array("file", "/tmp/error-output.txt", "a") );

$process = proc_open("time ./a a.out", $descriptorspec, $pipes, $cwd);

echo stream_get_contents($pipes[1]);
fclose($pipes[1]);

?>

[edan@edan tmp]$ php proc.php 

a.out here.

[edan@edan tmp]$ cat /tmp/error-output.txt

real    0m0.001s
user    0m0.000s
sys     0m0.002s