3

ob_start が出力バッファリングをオンにすることは知っていますが、それが何を意味するのか完全には理解していません。私にとっては、スクリプト データの出力が停止するだけです。

これは本当ですか?この場合、ブラウザはどのようにデータを出力しますか? ob_end_flush() を使用して最終的にオフにする必要がありますか?

ob_gzhandler は Web ページを圧縮するため、ブラウザーはこれらのページをどのように処理しますか?

ob_start("gzhandler") をコードで見たことがあります。ob_gzhandler は Web ページを圧縮するため、ob_start("gzhandler") は何を意味し、両方の関数にどのように適用されますか?

すべての助けに感謝します!

4

2 に答える 2

4

出力バッファリングとは、出力を stdout ストリームに直接書き込むのではなく、バッファに書き込むことを意味します。

次に、スクリプトが終了すると (または を呼び出すとob_end_flush())、そのバッファーの内容が stdout に書き込まれます。

を使用ob_gzhandlerすると、gzip 圧縮されるように、stdout に書き込む前にバッファーの内容が変換されます。(gzip 圧縮をサポートするブラウザーは、反対側でこれを逆にして、コンテンツを解凍します。)

于 2012-03-15T00:30:06.403 に答える
1

わかりました、このように説明しましょう。

これはバッファシステムの用途の 1 つにすぎませんが、ちょっとクールだと思います。

まずこのアニメを見てほしい。

オペレーティング システムの起動

たとえば、このようなレベル ベースの構造を持つ php スクリプトがある場合、次のように記述できます。

データベース サーバーへの接続が確立されました。

選択したデータベース: my_database

データクエリが開始されました

データクエリが終了しました (検出: 200 行)

...

などですが、出力バッファリングとフラッシュを使用しない場合は、スクリプトの実行がすべて終了したときにこれらの行が表示されます。でも、「自分のスクリプトがいつ何をしているか見たい!」と思ったら、まずは…

申し訳ありませんが、まずphp.iniファイルでimplicit_flushを「on」に設定し、Apacheサーバーを再起動して、これをすべて確認する必要があります.

次に、"ob_start();" によって出力バッファリング (省略形 "ob") を開く必要があります。次に、コードの任意の場所に "echo" ステートメントを配置し、その後に "ob_flush();" を配置します。コマンドを実行して、スクリプトがリアルタイムで実行されていることを確認します。

後で、次のようなファイル ベースの静的コンテンツ バッファリングにも使用されます。

  1. ページの先頭 (またはキャプチャしたいコンテンツの先頭) に ob_start() を配置します。

  2. ページの最後 (またはキャプチャしたいコンテンツの最後) に ob_end_flush() を配置します。

  3. 次に $my_var = ob_get_contents(); サーバーが作成してクライアントに送信するすべての HTML 出力を my_var 変数に取得し、必要に応じて使用します。ほとんどの場合、ファイルに保存され、ファイルの最終変更日を確認することで、静的バッファリングとして使用されます。

あなたの心にいくつかの電球を灯すことができれば幸いです。

于 2012-03-15T00:57:16.323 に答える