ホームページ >バックエンド開発 >PHPチュートリアル >PHP プロセスからリアルタイム出力を取得するにはどうすればよいですか?

PHP プロセスからリアルタイム出力を取得するにはどうすればよいですか?

DDD
DDDオリジナル
2024-12-23 18:34:14553ブラウズ

How Can I Get Realtime Output from a PHP Process?

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 などの長時間実行プロセスの場合、ページが閉じられた後でもプロセスが実行され続けることがあります。

これに対処するには、次の手法を使用できます:

  • proc_terminate() を使用して、スクリプトの終了時にプロセスを明示的に強制終了します。
  • pcntl_signal() を使用して、ページから離れるユーザーをトラップし、
  • プロセスにタイムアウトを設定し、指定した期間が経過すると自動的に終了します。

これらのメソッドを実装することで、開発者は PHP スクリプトから開始されたプロセスが適切に実行されることを確認できます。ユーザーがページから移動したときに処理されます。

以上がPHP プロセスからリアルタイム出力を取得するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。