1

パラメータが設定されたob_startの使用法はわかりますが、パラメータがまったく設定されていない状態で呼び出す場合output_callbackの使用法はわかりません。ob_start

後ですべての出力を一度にスローするために出力を無効にすることのポイントは何ですか?ダウンロードはページが完全にレンダリングされた後(またはob_end_flushが呼び出されたとき)にのみ開始されるため、これはより多くのメモリ(サーバー側)と遅いダウンロード(クライアント側)を使用しませんか?

ob_start();
for ($i = 1; $i <= 15; $i++)
{
    echo $i, ' ';
    sleep(1);
}
ob_end_flush();

ob_start()(上記のスニペットのように)パラメータを設定せずに使用することの使用法/利点を誰でも教えてくれます。

4

4 に答える 4

4

1つの理由は、コードの小さなセクションの出力を「取得」することです。

したがって、実行したい独立したコードがあり、それを直接出力したくないとしましょう。あなたにできることは

ob_start();
include 'file.php';
$output = ob_get_clean();

実例を紹介します。アプリケーションのインストーラーを作成しているとします。そして、そのインストーラーの一部として、現在のPHP情報(からのデータ)を表示したいとしますphpinfo()。ただし、(フレームを使用するのではなく)その情報をページの残りの部分と統合する必要があります。したがって、できることはphpinfo()、出力バッファーを使用しての出力を取得し、それを変更してから、テンプレートファイルの目的の場所に表示することです。

ob_start();
phpinfo();
$info = ob_get_clean();
//Massage the output, remove the doctype, html, head, and body tags
echo $info;

ビューファイルでも使用しています。Viewクラスでは、__toString()メソッドは実際にビューをレンダリングします。しかし__toString()、文字列をエコーするのではなく返すことが期待されているので、出力バッファリングを使用してテンプレートをキャプチャし、それを返します...

于 2010-06-18T19:39:23.200 に答える
2

ob_start()エコーを使用して多数の小さな断片を出力するPHPスクリプトがある場合、バッファーを使用してバッファリングし、完了したらすべてをフラッシュすると 、PHPスクリプトの実行速度が速くなることがわかります。

(注:これは、PHPコア開発者によるブログからの報告のみです。私はそれを自分でテストしていないので、どれだけ速いかについての具体的な数値はありません。)

はい、バッファをメモリに保持しますが、HTML出力の大きさはどれくらいですか?PHP環境のメモリ制限と比較すると、かなり小さい可能性があります。

はい、すべて完了するまで出力を遅らせますが、PHPの実行速度が速いため、合計経過時間が短くなります。Apacheスレッドが別のリクエストに移動するのが早ければ早いほど、サイトのスケーラビリティが向上します。

これは、すべてのページが出力バッファリングを使用することで恩恵を受けるということではありません。いくつかの可変要素を持つほとんど静的なHTMLである典型的なPHPスクリプトでは、この利点は重要ではない可能性があります。

于 2010-06-18T19:26:27.840 に答える
1

1つの使用法は、スクリプトがコンテンツを送信する準備ができるまでphpがヘッダーを送信しないようにすることです。これにより、出力を作成するときにヘッダーを変更できるようになります。

これを読んで、出力バッファリングについての記事を読んで、それを使用する方法のより多くのアイデアを得てください。 http://www.devshed.com/c/a/PHP/Output-Buffering-With-PHP/

于 2010-06-18T19:38:08.780 に答える
0
  1. 「ヘッダーはすでに送信されています」エラーが発生しないことを確認してください
  2. すべてのHTMLデータをキャッチしてキャッシュファイルを作成します

とにかく1は絶対に起こらないと思うので、2つだけ使用します

于 2010-06-18T19:30:04.873 に答える