データベーステーブルから行を選択するwhileループがあり、whileループ内でこのデータを出力しています:
print $result2["forename"].' '. $result2["surname"].' ('.$result2["email"].')<br><hr />';
しかし、ページをロードするのに時間がかかり、一度に大量の行を表示します。データベースからデータをロードしているときに、行ごとに表示するにはどうすればよいですか?
PHP はサーバー上で実行され、データを行ごとに出力しますが、スクリプトの処理が完了するまでユーザーに何も送信しません。
パフォーマンスに問題がある場合は、代わりにクエリを調整するか、返されるレコードの数を制限することを検討してください。
一般的なトリックは、ページネーションを使用して一連の行を選択し、それらをすばやく表示してから、必要に応じてデータベースを再クエリして次の一連の行を取得することです。通常、これによりフットプリントが大幅に小さくなり、ユーザーは追加の結果を実際に表示するかどうかを選択できます。
PHP スクリプト全体が実行される前にバッファリングされたデータを送信するには、flush()関数を使用できます。ただし、すべての環境で機能するとは限らないため、ドキュメントを注意深く読んでください。
作業例:
<?php
header("Content-type: text/html; charset=utf-8");
for ($i = 1; $i <= 10; $i++) {
print ($i . '<br>');
flush();
ob_flush();
sleep(1);
}
事前にヘッダーを送ることが重要なようです。私のローカルホストではそれなしでは機能しませんでした。また、 ドキュメントに従って との両方を使用することをお勧めしflush()
ます。ob_flush()
flush()
それでもうまくいかない場合
PHPドキュメントには次のように書かれています:
mod_gzip のような Apache 用のサーバー モジュールは、独自のバッファリングを行う場合があり、これにより、flush() によってデータがクライアントにすぐに送信されなくなります。