現在の位置: ホーム> 最新記事一覧> Time_nanos Sleepとob_flushを使用して、ステップバイステップの出力データを実現します

Time_nanos Sleepとob_flushを使用して、ステップバイステップの出力データを実現します

gitbox 2025-05-29

  • この関数は、指定された秒数とナノ秒のスクリプトを一時停止します。睡眠USLoopよりも精度が高く、より細かいレイテンシコントロールが必要なシナリオに適しています。

  • ob_flush()
    PHPの出力バッファー含有量をブラウザに強制しますが、バッファーを閉じません。 Flush()で使用すると、コンテンツをリアルタイムで「プッシュ」できます。

注:出力が実際にブラウザに到達するようにするために、通常はflush()で使用され、サーバー側とブラウザ側の両方でキャッシュと圧縮を無効にすることはできません。

2。段階的なリアルタイム出力を実装するためのサンプルコード

<?php
// スクリプトの実行時間制限を閉じます(必要に応じて)
// set_time_limit(0);

// 出力バッファリングをオンにします
ob_start();

// ブラウザのキャッシュと圧縮を無効にします,インスタントデータ送信を確認してください
header("Content-Type: text/plain");
header("Cache-Control: no-cache");
header("X-Accel-Buffering: no"); // のために Nginx キャッシュを無効にします
// 閉鎖 gzip 圧縮(デフォルトでサーバーがオンになっている場合)
// 特定の方法は、サーバー環境に従って構成されています

for ($i = 1; $i <= 5; $i++) {
    echo "現在の手順:{$i}\n";

    // 強制リフレッシュ PHP 出力バッファー
    ob_flush();
    flush();

    // 使用 time_nanosleep マイクロ2番遅延,0.52番 = 500,000,000 纳2番
    time_nanosleep(0, 500000000);
}

echo "すべてのステップが完了します!\n";
?>

説明:

  • ob_start() :出力バッファリングを開始して、バッファフラッシュを制御できるようにします。

  • エコー:情報を1つずつ出力します。

  • ob_flush() + flush() :バッファコンテンツを強制的にクライアントに送信し、ブラウザディスプレイを更新します。

  • Time_nanos Sleep(0、500000000) :0.5秒(500,000,000ナノ秒)の一時停止により、出力効果がより明確になり、リアルタイムプロセスをシミュレートします。

  • ブラウザーとサーバーキャッシュによって引き起こされるコンテンツの遅延を避けるために、HTTPヘッダーを適切にセットアップします。

3。注意すべきこと

  1. サーバー構成の影響<br> サーバー(Apache、Nginxなど)は、デフォルトで出力圧縮またはバッファリングを有効にする場合があり、リアルタイムの出力効果に影響します。 GZIP圧縮をオフにして、キャッシュをスピードアップしてください。

  2. ブラウザの動作<BR> 一部のブラウザは、特定のサイズに達するまでコンテンツを蓄積し、出力コンテンツが小さすぎるとすぐに表示されない場合があります。特定の数の空白文字を出力して、レンダリングをトリガーしようとすることができます。

  3. バッファサイズ
    PHPの出力バッファーとWebサーバーバッファーのサイズの両方が出力速度に影響します。バッファサイズは、実際の条件に応じて調整できます。

  4. PHPバージョン
    Time_nanos Sleepは、環境が要件を満たすことを保証するために、PHP 5.0.0から始まります。

4。概要

Time_nanos Sleepob_flush()を組み合わせることにより、PHPにステップバイステップおよびセグメント化されたリアルタイムデータ出力を実装し、長期スクリプトの進捗状況に対するユーザーの認識を高めることができます。この方法はシンプルで使いやすく、遅延がマイクロ秒を必要とするシナリオに適しています。

妥当なサーバーとブラウザの設定と組み合わせると、非常にスムーズなリアルタイムの出力効果を取得し、ユーザーエクスペリエンスを向上させることができます。