ホームページ > バックエンド開発 > PHPチュートリアル > flash()関数が無効なのでしょうか?出力をリアルタイムで更新できません。解決するにはどうすればよいですか?

flash()関数が無効なのでしょうか?出力をリアルタイムで更新できません。解決するにはどうすればよいですか?

WBOY
リリース: 2016-06-23 14:38:38
オリジナル
1314 人が閲覧しました

この投稿は zhoumengkang によって最終編集されました: 2013-05-28 13:46:14

テスト コードは次のとおりです:
<?phpfor($i=0;$i<5;$i++){  	echo '<br/>abc___'.$i;	ob_flush();	flush();	sleep(1);}ob_end_flush();?> 
ログイン後にコピー

理論的には、1 つのメッセージは 1 秒以内に出力されるはずですよね。しかし、テストの結果は5秒後に出ました。
オンラインで確認したところ、「一部の Web サーバー プログラム、特に Win32 での Web サーバー プログラムは、結果をブラウザーに送信する前に、プログラムの終了までスクリプトの出力をキャッシュします。」と書かれていました。 Windowsのローカルxampp統合環境。


ディスカッション (解決策) への返信

理由もなくユーザーの帯域幅を占有するこの行為は非常に退屈です
遅延出力の効果は、ブラウザーで js を使用して実装する必要があります

あなたのコードは IE で表示されることはありませんIE は受信データを解釈する前にバッファーがいっぱいになるのを待つ必要があるため、望ましい効果が得られます

理由もなくユーザーの帯域幅を占有するこの習慣は非常に退屈です
遅延出力の効果はブラウザーで js を使用して実装する必要があります

IE では、受け取ったデータを解釈する前にバッファーがいっぱいになるまで待つ必要があるため、コードは IE で望ましい効果を得ることができません
うーん、いいえ、私はこの関数についてあまり知りません。テストにはChromeを使用しています。
実際、私はこの効果を実現したいと考えています: たとえば、いくつかのファイルをバッチで処理するスクリプトを作成します
しかし、他の人がそれを使用すると、そのプロセスが実行されているか停止しているかがわかりません。 。
そこで、ループが正常に実行されるたびに xxxx が正常に実行されたという文を出力したいと考えています。
-------------
最も似ているのは、インストール時にデータ テーブルを作成するときの表示です。オープンソースソフトウェア。 。
ただし、自分で書いたものはすべてのデータテーブルが作成されるまで表示されません。

この種の理由もなくユーザーの帯域幅を占有するのは非常に退屈です
遅延出力の効果は、js を使用してブラウザに実装する必要があります

IE は待機する必要があるため、コードは IE で望ましい効果を得ることができません 受信したデータのみを解釈しますバッファがいっぱいになった後
私のアイデアは、完了した操作を「遅延」させるのではなく、「即時に」表示することです。司会者は何を考えているのだろうか。

同じ質問です!また、数時間実行する必要があるプログラムもあり、それが正常に実行されているかどうかを判断するには、データベース内のデータを確認するしかありません。
私の一時的なアプローチは、単純なモニタリングのみです。たとえば、プログラムに memcache 書き込み操作を追加し、読み取るために別のページを書き込みます。

同じ質問です!また、数時間実行する必要があるプログラムもあり、それが正常に実行されているかどうかを判断するには、データベース内のデータを確認するしかありません。
私の暫定的なアプローチは、単純なモニタリングのみです。たとえば、プログラムに memcache 書き込み操作を追加し、読み取るために別のページを書き込みます。 良い方法がある場合は、忘れずに共有してください。他のオープン ソース コードがインストール中にどのようにインスタント表示効果を実現するかを確認してみます。

また戻ってきました、試してみてください

<?phpecho str_pad('',4096);set_time_limit(50);for($i=0;$i<=5;$i++){    echo $i.'<br />';ob_flush();flush(); sleep(1);}?>
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

過去 2 日間でかなりの数の人がこの問題を抱えていました。
この書き込み方法はさまざまなブラウザでテストするのに問題はありませんが、この方法ではキャッシュ領域にゴミが書き込まれるという意見もありました。PHP で例外をスローしてみてください。時間があるときに勉強してから共有してください。

また戻ってきました、試してみてください

<?phpecho str_pad('',4096);set_time_limit(50);for($i=0;$i<=5;$i++){    echo $i.'<br />';ob_flush();flush(); sleep(1);}?>
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

過去 2 日間でかなりの数の人がこの問題を抱えていました。
この書き込み方法はさまざまなブラウザでテストするのに問題はありませんが、この方法ではキャッシュ領域にゴミが書き込まれるという意見もありました。PHP で例外をスローしてみてください。時間があるときに勉強してから共有してください。
試してみたらうまくいきました。秘密はどこにあるのでしょうか?

また戻ってきました、試してみてください

<?phpecho str_pad('',4096);set_time_limit(50);for($i=0;$i<=5;$i++){    echo $i.'<br />';ob_flush();flush(); sleep(1);}?>
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

過去 2 日間でかなりの数の人がこの問題を抱えていました。
この書き込み方法はさまざまなブラウザでテストするのに問題はありませんが、この方法ではキャッシュ領域にゴミが書き込まれるという意見もありました。PHP で例外をスローしてみてください。時間があるときに勉強してから共有してください。
これのせいでしょうか? echo str_pad('',4096);
このプログラムは 30 秒を超えて実行されることはありません。
例外をスローして、try-catch をこのように使用することもできます。勉強になりました。考えてみます。あなたはいい人です!

うーん、最初はphp_cliを使おうと思ったんですが、手順が多くて不親切だと思ったので、ページを開くのが負担になってしまいました。 . さあ、cliを使うことにしました。

うーん、最初はphp_cliを使おうと思ったんですが、手順が多くて不親切だと思ったので、ページを開くのが負担になってしまいました。 . さあ、cliを使うことにしました。 今日はもう一度Chromeを使ってテストしてみましたが、計算が完了するのを待って一度に出力しました。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート