phpからリアルタイムの出力を取得する方法は?

Source php echo real-time

phpからリアルタイムの出力を取得する方法は?すべてをメモリ/バッファに保存してブラウザに一度にエコーすることなく?

リアルタイムを作成した場合-echo.php
<?php
for($i = 0; $i < 10; $i++)
{
echo $i;
sleep(1);
}

インターネットブラウザからアクセスすると、9〜10秒後に次の出力が表示されます。
0123456789

しかし、私が出力したいと思っているのは、ブラウザからphpファイルにアクセスすると、次のようになるはずです。

0

次に1秒間待ってから、「0」の後に「1」を追加します
次に1秒間待ってから、「1」の後に「2」を追加します
等々。

アニメーション/リアルタイムのように呼ばれるものをidkします。

これをどのように達成しますか?

私は、何が起こっているのか、どこに向かっているのかを監視できるように、常に出力が必要なプロジェクトに取り組んでいます。

ありがとう
推奨答え
現在の出力を表示する場合は、 flush() 関数を使用します。

簡単な例:
<?php
for ($i = 1; $i <= 10; $i++)
{
   echo '<p>' . $i . '</p>';
   flush();
   sleep(1);
}
?>

出力バッファリングを使用している場合は、 ob_flush() も呼び出す必要があります

注:Microsoft Internet Explorerの一部のバージョンは、256バイトの出力を受信した後にのみページの表示を開始するため、これらのブラウザーでページを表示するには、フラッシュする前に余分な空白を送信する必要があります。

このようなもの:
<?php
echo str_repeat(" ", 256); 
flush();
?>

実例(ob_start()関数なし):
<?php
echo str_repeat(" ", 256);
for ($i = 1; $i <= 10; $i++)
{
    sleep(1);
    echo '<p>' . $i . '</p>';
    flush();
}
?>
その他答え #1
PHPは解釈されたサーバー言語です。 PHPを使用すると、いくつかのローカルプログラムを作成したり、Webアプリケーションのサーバー側を実装したりできます。 PHPコードをコマンドラインで実行すると、コードは期待どおりに機能するはずです。ただし、ブラウザからPHPを使用する場合は、HTTPで適用可能な要求/応答ポリシーがあります。ブラウザにリクエストを送信すると、スクリプトが実行されたときにのみサーバーの応答を受信します。したがって、ブラウザを介してページを要求し、応答を待ちます。サーバーはリクエストを受信し、10個の番号をエコーアウトし、その間に2回目のスリープを設定します。 サーバーはジョブを終了すると、応答をブラウザーに送り返します。ブラウザーは、単一のバッチで10個の数値を取得します。これが、10秒間待ってから、すべての出力が一度に表示されることを経験している理由です。サーバーがスリープを実行してエコーを収集し、それを表示していたブラウザーに送り返したためです。

もちろん、ブラウザに10個のサーバー応答を表示したい場合は、もっとうまくやらなければなりません。おそらく、pollingを使用できます(たとえば、JavaScriptのsetIntervalまたはsetTimeout関数を使用して、クライアント側ので秒を待機し、その後、$.ajaxを使用してサーバーに投稿リクエストを送信します。サーバーでリクエストを処理しますクライアント側には、サーバーの応答を処理してそれに応じて表示するコールバックが必要です)。
その他答え #2
リアルタイム出力を妨げる出力バッファリングがオンになっている可能性があります。
したがって、echoflush()を組み合わせたob_flush()が必要です。

出典:http://php.net/manual/en/function.ob-flush.php#109314
header( 'Content-type: text/html; charset=utf-8' );
echo 'Begin ...<br />';
for( $i = 0 ; $i < 10 ; $i++ ){
    echo $i . '<br />';
    flush();
    ob_flush();
    sleep(1);
}
echo 'End ...<br />';

フィドルを作成しようとしましたが、フィドルでsleep()が許可されませんでした。そこでGIFを作成しました。

enter image description here

関連記事

libSVMを使用したSVMのデータの不均衡
複数のサーバーでのFlaskログインはどのように機能しますか
zzzまでaaaaa ababを出力するphpアルゴリズム
ラムダ関数avartacoの代わりにcreate_function
PHPインクルードファイルから文字列を置き換えます