4

重複の可能性:
PHP sleep() が PHP コード全体に影響を与えるのを止めるにはどうすればよいですか?
PHP: sleep() の前後にデータを出力しますか?

ローカルホストに、データをエコーし​​てその間にスリープするphpコードがあります。クライアント側では、受信したデータをタイムリーに見ることができ、レンダリングも行います。

$condition = true;
while($condition) {
  $data = get_some_data(); // may not fetch new data to be sent, each iteration. 
  echo $data;
  ob_flush();

  $i++;
  sleep(1);

  $condition = run_some_logic(); //could become false depending on DB value
}

しかし、別のブラウザーを開いて別のページ (localhost を再度) を開こうとすると、開かれません。最初のウィンドウを閉じて、しばらくしてから 2 番目の URL を開こうとすると、うまくいきます。

これは明らかに睡眠と関係があると思います。他のすべてのリクエストをブロックせずに、sleep() を呼び出したり、間隔を置いてデータを出力したりする方法はありますか?

ここで私がやろうとしているのは、条件が満たされるまでループを終了させないことです。

4

1 に答える 1

3

PHP スクリプトが終了する (データベースの変更に基づいて何らかの条件が満たされる) のを単に待っているように見えるので、私はこの方法ではなく、XHR リクエスト (またはクールな子供たちがそれを呼び出すのが好きな AJAX) を使用します。ときどきクライアント。

これにより、ユーザーが状態が変わるまで待機すること (ブロック解除) を防ぎ、PHP のブロックを防ぐことができます。

単純に AJAX を 5 秒ごとに実行して、バックエンドの状態をチェックし、変更されているかどうかを確認します。

于 2012-08-26T12:47:22.087 に答える