PHP でのリアルタイム プロセスの実行と終了
この質問では、Web ページ上でプロセスを実行し、その出力をリアルタイムで受け取る方法について説明します。 、プロセスが完了するまで待つ必要がなくなります。質問の 2 番目の部分では、ユーザーがページを離れたときにそのようなプロセスを終了する方法について説明します。
PHP でプロセスを実行し、その出力をストリーミングする方法の 1 つは、proc_open() 関数を使用することです。この関数を使用すると、親 PHP プロセスから独立して実行できる子プロセスを作成できます。リアルタイム出力を容易にするために、適切なファイル記述子を使用して $descriptorspec パラメーターを指定して、プロセスの stdout および stderr ストリームをキャプチャできます。
$cmd = "ping 127.0.0.1"; $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 ); flush(); $process = proc_open($cmd, $descriptorspec, $pipes, realpath('./'), array());
子プロセスが作成されたら、ループを使用して継続的に実行できます。 stdout パイプから読み取り、出力を出力します。
echo "<pre class="brush:php;toolbar:false">"; if (is_resource($process)) { while ($s = fgets($pipes[1])) { print $s; flush(); } } echo "";
ユーザーが終了したときに子プロセスを終了するにはページでは、PHP のシャットダウン機能を使用できます。シャットダウン関数は、PHP スクリプトの終了時に実行されます。これは、ユーザーがブラウザーのタブを閉じたり、ページから移動したりしたときに発生する可能性があります。シャットダウン関数では、子プロセス ハンドルで proc_close() を呼び出してプロセスを終了できます。
register_shutdown_function(function() { proc_close($process); });
以上がリアルタイム PHP プロセスを実行および終了するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。