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

PHP のシェル コマンドからリアルタイム出力を取得するにはどうすればよいですか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-12-03 20:03:16325ブラウズ

How Can I Get Real-Time Output from Shell Commands in PHP?

PHP のシェル実行によるリアルタイム出力

shell_exec や exec などの関数を使用した PHP でのシェル実行は、オペレーティングシステム。ただし、デフォルトでは、これらの関数はコマンドが完了した後にのみ出力全体を表示します。これにより、進行状況を監視したり、リアルタイムの更新を表示したりする機能が制限されます。

解決策: ライブ出力を解放する

リアルタイムの出力表示を実現するために、PHP は 2 つの主要な機能を提供します。オプション:

  1. popen() (並列用)インタラクション:

    popen() を使用すると、子プロセスとの双方向通信チャネルを確立できます。これにより、子プロセスをファイルであるかのように読み書きできるようになります。ループと fread() を使用すると、出力をキャプチャして動的に表示できます。

  2. passthru() 直接出力:

    より単純なアプローチとして、 passthru() を使用してコマンドの出力をブラウザに直接出力できます。これは、中間ストレージを使用せずに結果をストリーミングする便利な方法を提供します。

popen() を使用したコード例:

// Ensure flushing of output buffers
while (@ ob_end_flush());

// Open the child process for reading
$proc = popen($cmd, 'r');

echo '<pre class="brush:php;toolbar:false">';

// Keep reading and displaying output until EOF
while (!feof($proc)) {
    echo fread($proc, 4096);
    flush();
}

echo '
'; // Close the process pclose($proc);

注:

  • session_write_close() を使用します。同時リクエストのブロックを避けるためにセッションがアクティブである場合は、ループの前にヘッダーを設定します header('X-Accel-Buffering: no');バッファリングを無効にする Nginxgateway が存在する場合。

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

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