0

PHP + Zendを使用してCLIプロセスを構築しています(ええ、私も嫌いです)。exec()またはpassthru()コマンドの出力に関して修正する方法がわからない奇妙な問題が発生しています。

一言で言えば、私はtestexecActionを持っています

fwrite(STDOUT,"First\n");
passthru("ping -c 3 192.168.18.10");
fwrite(STDOUT,"Second\n");

Zend用に作成したCLIインターフェイスを使用して呼び出すと、次の出力が得られます

~ php console.php --funcion testexec
First
Second
PING 192.168.18.10 (192.168.18.10): 56 data bytes
64 bytes from 192.168.18.10: icmp_seq=0 ttl=64 time=0.692 ms
...

ご覧のとおり、パススルーコマンドからの出力は出力されますが、「2番目の」行の後に出力されます。たとえば、どこかのバッファに保存されるように、出力がバッファリングされないようにこの動作を変更したいのですが、それを達成する方法を考えてください。その背後にある理由は、passthru / execを使用して、出力をリアルタイムで順番に表示したい他の長いphpプロセスを呼び出していることです。

どこかでZendオプションだと思いますが、生のPHPを使用して他のテストを行い、出力はバッファリングされずにコンソールにすぐに出力されるため、「どこか」についてはわかりません。

私のZendCLIインターフェースはかなりシンプルです

$_SERVER["REQUEST_URI"] = "/console/" . getConsoleArg("-function");
$application->bootstrap()
    ->run();
4

1 に答える 1

0

ob_flush();を呼び出して修正しました。私の内部プロセス出力で。

于 2013-02-14T16:38:26.373 に答える