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

PHP でリアルタイム出力を使用してプロセスを実行および管理するにはどうすればよいですか?

Linda Hamilton
Linda Hamiltonオリジナル
2024-12-24 09:44:19183ブラウズ

How Can I Run and Manage Processes with Real-time Output in PHP?

PHP でのリアルタイム出力によるプロセスの実行

リアルタイム出力を提供する Web ページ上でのプロセスの実行は、貴重な機能となる可能性があります。たとえば、「ping」プロセスを実行し、その出力を 1 行ずつキャプチャすると、ユーザー エクスペリエンスが向上します。 PHP でこれを実現するには、次のアプローチを検討してください。

リアルタイム出力でプロセスを実行するには、proc_open() を使用できます。以下に例を示します。

$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());
echo "<pre class="brush:php;toolbar:false">";
if (is_resource($process)) {
    while ($s = fgets($pipes[1])) {
        print $s;
        flush();
    }
}
echo "
";

この例では、proc_open() を使用して「ping 127.0.0.1」コマンドを実行し、その出力をリアルタイムでキャプチャします。 descriptorspec 配列は、プロセスのファイル記述子を定義します。具体的には、子プロセスの読み取り先のパイプとして stdin を設定し、子プロセスの書き込み先のパイプとして stdout を設定し、子プロセスの書き込み先のパイプとして stderr を設定します。

flush()は、子プロセスからの出力がすぐに表示されるようにするために使用されます。 is_resource($process) は、子プロセスがまだ実行中かどうかを確認します。 while ループは子プロセスの stdout パイプから出力を継続的に読み取り、Web ページに出力するため、リアルタイムで ping 結果を確認できます。

実行中のプロセスの強制終了

ユーザーがページを離れたときに子プロセスを強制終了するには、proc_terminate() を使用できます。 「ping」プロセスの場合、次のコードを使用できます:

proc_terminate($process);
?>

これにより、ping プロセスが終了し、実行が続行されなくなります。

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

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