ホームページ > バックエンド開発 > PHPチュートリアル > リアルタイム PHP プロセスを実行および終了するにはどうすればよいですか?

リアルタイム PHP プロセスを実行および終了するにはどうすればよいですか?

Patricia Arquette
リリース: 2024-12-05 08:26:11
オリジナル
661 人が閲覧しました

How to Execute and Terminate Realtime PHP Processes?

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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート