ホームページ >バックエンド開発 >PHPチュートリアル >PHP プロセスからリアルタイム出力を取得するにはどうすればよいですか?
PHP でリアルタイム出力を使用してプロセスを実行する
PHP でプロセスを実行する場合、その出力をリアルタイムで表示することが望ましい場合があります。この記事では、exec() 関数と記述子仕様の独自の構成を使用してこれを実現する方法について説明します。
リアルタイム出力キャプチャ
プロセスの出力をキャプチャするにはリアルタイムでは、次の記述子の仕様を指定する必要があります:
$descriptorspec = array( 0 => array("pipe", "r"), // stdin is a pipe that the child will read from 1 => array("pipe", "w"), // stdout is a pipe that the child will write to 2 => array("pipe", "w") // stderr is a pipe that the child will write to );
この設定はリダイレクトしますstdin、stdout、stderr をパイプに送信し、fgets() 関数を使用してリアルタイムで stdout から読み取ることができます。
例: リアルタイム出力による ping
この方法をデモンストレーションして、リアルタイムで ping コマンドを実行してみましょう出力:
$cmd = "ping 127.0.0.1"; $process = proc_open($cmd, $descriptorspec, $pipes, realpath('./'), array()); echo "<pre class="brush:php;toolbar:false">"; if (is_resource($process)) { while ($s = fgets($pipes[1])) { print $s; flush(); } } echo "";
このコードは、利用可能になった ping プロセスの各行を出力し、ネットワーク トラフィックのライブ ビューを提供します。
プロセス終了
ユーザーが Web ページから離れたときにプロセスを終了するのは難しい場合があります。 ping などの長時間実行プロセスの場合、ページが閉じられた後でもプロセスが実行され続けることがあります。
これに対処するには、次の手法を使用できます:
これらのメソッドを実装することで、開発者は PHP スクリプトから開始されたプロセスが適切に実行されることを確認できます。ユーザーがページから移動したときに処理されます。
以上がPHP プロセスからリアルタイム出力を取得するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。