0

データベーステーブルから行を選択するwhileループがあり、whileループ内でこのデータを出力しています:

print $result2["forename"].' '. $result2["surname"].' ('.$result2["email"].')<br><hr />';

しかし、ページをロードするのに時間がかかり、一度に大量の行を表示します。データベースからデータをロードしているときに、行ごとに表示するにはどうすればよいですか?

4

3 に答える 3

1

PHP はサーバー上で実行され、データを行ごとに出力しますが、スクリプトの処理が完了するまでユーザーに何も送信しません。

パフォーマンスに問題がある場合は、代わりにクエリを調整するか、返されるレコードの数を制限することを検討してください。

一般的なトリックは、ページネーションを使用して一連の行を選択し、それらをすばやく表示してから、必要に応じてデータベースを再クエリして次の一連の行を取得することです。通常、これによりフットプリントが大幅に小さくなり、ユーザーは追加の結果を実際に表示するかどうかを選択できます。

于 2013-09-17T10:45:20.193 に答える
0

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() によってデータがクライアントにすぐに送信されなくなります。

于 2013-09-17T10:49:32.477 に答える