2

私は現在オンラインプログラムに取り組んでいます。proc_open()を使用してコマンドラインでコマンドを実行するphpスクリプトを作成しています(Linux Ubuntuの場合)。これはこれまでの私のコードです:

<?php
$cmd = "./power";

$descriptorspec = array(
   0 => array("pipe", "r"),
   1 => array("pipe", "w"),
   2 => array("pipe", "w"),
);

$process = proc_open($cmd, $descriptorspec, $pipes);

if (is_resource($process)) {

    fwrite($pipes[0], "4");
    fwrite($pipes[0], "5");
    fclose($pipes[0]);

    while($pdf_content = fgets($pipes[1]))
    {
        echo $pdf_content . "<br>";
    }
    fclose($pipes[1]);

    $return_value = proc_close($process);
}
?>

powerは、入力を2回要求するプログラムです(基数と指数を取り、基数^指数を計算します)。アセンブリで書かれています。しかし、このスクリプトを実行すると、間違った出力が得られます。私の出力は「1」ですが、出力として4^5を期待しています。

1つの入力を受け取るプログラムを実行すると、動作します(入力した値を1つ増やす簡単なプログラムをテストしました)。

fwriteコマンドに関して何かが足りないと思います。誰か助けてくれませんか?

前もって感謝します!

4

1 に答える 1

3

パイプに改行を書き込むのを忘れたので、プログラムはそれが45入力としてのみ取得されたと見なします。これを試して:

fwrite($pipes[0], "4");
fwrite($pipes[0], "\n");
fwrite($pipes[0], "5");
fclose($pipes[0]);

または短い:

fwrite($pipes[0], "4\n5");
fclose($pipes[0]);
于 2012-06-04T11:50:31.300 に答える