php ob_start()、ob_end_flush、ob_end_clean() マルチレベルバッファリング_PHP チュートリアル
Jul 13, 2016 pm 05:52 PM
ob_start() と ob_end_flush() は出力を制御するのに適したペアです。ペアで出現する場合は理解に問題ありませんが、出現回数が増えるとさらにわかりにくくなります
ソースプリント?01 <?php を表示
02 ob_start();
03 エコー 'レベル 1';04 ob_start();
05 エコー 'レベル 2';06 ob_start();
07 エコー 'レベル 3';08 ob_end_flush();
09 ob_end_flush();10 ob_end_flush();
明らかに、結果は次のようになります:レベル1
レベル2
レベル3プログラムを修正して、ob_end_flush() を ob_end_clean() に変更して次のようにした場合、結果はどうなると思いますか?これらの機能の説明を添付します:
ob_end_clean — バッファをクリア (消去) し、出力バッファリングを閉じる
ob_end_flush — 出力バッファの内容をフラッシュして (送信して) バッファを閉じます
ob_flush — 出力バッファーの内容をフラッシュ (送信) します
ソースプリント?01 <?php を表示
02 ob_start();
03 エコー 'レベル 1';
04 ob_start();
05 エコー 'レベル 2';
07 エコー 'レベル 3';
08 ob_end_clean();//修正
09 ob_end_flush();
10 ob_end_flush();
結果:
レベル1
レベル2ob_end_clean() が最新の ob_start() の出力をクリアすると思っているかもしれませんが、実際には、このステートメントはあまり包括的ではありません。以下の例を参照してください。 ソースプリント?01 <?php を表示
02 ob_start();
03 エコー 'レベル 1';
04 ob_start();05 エコー 'レベル 2';
06 ob_start();07 エコー 'レベル 3';
08 ob_end_clean(); //最初の変更
09 ob_end_flush();
10 ob_end_clean() //2 番目の変更
途中にob_flush()はありませんか?論理的に言えば、level2 が出力されるはずです。
実際、これの主な理由は、出力のマルチレベル バッファリング メカニズムです。このプログラム例には 3 つの ob_start() があります。これは、3 つのバッファ A、B、C があることを意味します。実際、php プログラム自体にも最終出力バッファがあり、それを F と呼びます。
このプログラムでは、これらのバッファーには C->B->A->F というレベルがあり、F が最上位であり、プログラムの最終出力バッファーとなります。 。
はじまったばかり。 F:ヌル
ソースプリントを表示?1 ob_start();
新しいバッファ A を作成します。 A: null -> F: null
view sourceprint?1 echo 'レベル 1<br/>
プログラムには出力があり、その出力は最下位のバッファに入ります A: 'レベル 1
->'
sourceprint?1 ob_start() を表示します
新しいバッファBを作成します。 B:null -> A: 'レベル 1<br/>' F:null
view sourceprint?1 echo 'レベル 2<br/> プログラムには出力があり、その出力は最下位のバッファ B B:'レベル 2<br/> -> A:'レベル 1<br/>F:null;
ソースプリントを表示?1 ob_start();
新しいバッファ C C:null B:'レベル 2<br/> A:'レベル 1<br/> ->
プログラムには出力があり、その出力は C C:'レベル 3<br/> B:'レベル 2<br/> に入力されます。 ' -> フ:ヌル
view sourceprint?1 ob_end_clean() //最初の変更
バッファ C は空になり、閉じられます。 B: 'レベル 2<br/> -> A: 'レベル 1<br/>'
ソースプリントを表示?1 ob_end_flush();
バッファ B は前のレベルのバッファ A に出力され、閉じられます。 A: 'レベル 1<br/>レベル 2<br/> F:null;
sourceprint?1 ob_end_clean() を表示 //2 番目の変更 www.2cto.com
バッファ A がクリアされて閉じられます。 この時点では、実際にはバッファ A の内容が最後の F に出力されていないため、プログラム全体としては何も出力されません。
ob他にもたくさんの機能がありますが、これらの仕組みさえ理解できれば、理解するのは難しくないはずです。残りの機能を添付します
flash — 出力バッファをフラッシュします
ob_clean — 出力バッファをクリア (消去) します
ob_end_clean — バッファをクリア (消去) し、出力バッファリングを閉じる
ob_end_flush — 出力バッファの内容をフラッシュして (送信して) バッファを閉じます
ob_flush — 出力バッファーの内容をフラッシュ (送信) します
ob_get_clean — 現在のバッファの内容を取得し、現在の出力バッファを削除します。
ob_get_contents — 出力バッファーの内容を返します
ob_get_flush — バッファの内容をフラッシュ (送信) し、内容を文字列として返し、出力バッファを閉じます。
ob_get_length — 出力バッファーの内容の長さを返します
ob_get_level — 出力バッファリングメカニズムのネストレベルを返します
ob_get_status — すべての出力バッファーのステータスを取得します
ob_gzhandler — 出力バッファの内容を圧縮するために ob_start で使用されるコールバック関数。 gzip 出力バッファへの ob_start コールバック関数
ob_implicit_flush — 絶対フラッシュをオン/オフにする
ob_list_handlers — 使用中のすべての出力ハンドラーをリストします。
ob_start — 出力制御バッファーを開きます
Output_add_rewrite_var — URL リライター値を追加します
Output_reset_rewrite_vars — URL リライター値をリセットします

人気の記事

人気の記事

ホットな記事タグ

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック











Ubuntu および Debian 用の PHP 8.4 インストールおよびアップグレード ガイド

PHP 開発用に Visual Studio Code (VS Code) をセットアップする方法
