ホームページ バックエンド開発 PHPチュートリアル php ob_start()、ob_end_flush、ob_end_clean() マルチレベルバッファリング_PHP チュートリアル

php ob_start()、ob_end_flush、ob_end_clean() マルチレベルバッファリング_PHP チュートリアル

Jul 13, 2016 pm 05:52 PM
clean end php start そして はい バッファ

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_clean — 出力バッファをクリア (消去) します

ob_end_clean — バッファをクリア (消去) し、出力バッファリングを閉じる
ob_end_flush — 出力バッファの内容をフラッシュして (送信して) バッファを閉じます
ob_flush — 出力バッファーの内容をフラッシュ (送信) します

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_flush();

結果:

レベル1

レベル2

ob_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/> ->

view sourceprint?1 echo 'レベル 3<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 リライター値をリセットします


www.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/478080.html技術記事 ob_start() と ob_end_flush() は、出力を制御するのに適したペアです。ペアで登場する分には問題ないのですが、二人で登場することが多くなると…
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットな記事タグ

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

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

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

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

Ubuntu および Debian 用の PHP 8.4 インストールおよびアップグレード ガイド Ubuntu および Debian 用の PHP 8.4 インストールおよびアップグレード ガイド Dec 24, 2024 pm 04:42 PM

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

CakePHP の日付と時刻 CakePHP の日付と時刻 Sep 10, 2024 pm 05:27 PM

CakePHP の日付と時刻

CakePHP プロジェクトの構成 CakePHP プロジェクトの構成 Sep 10, 2024 pm 05:25 PM

CakePHP プロジェクトの構成

CakePHP ファイルのアップロード CakePHP ファイルのアップロード Sep 10, 2024 pm 05:27 PM

CakePHP ファイルのアップロード

CakePHP ルーティング CakePHP ルーティング Sep 10, 2024 pm 05:25 PM

CakePHP ルーティング

CakePHP について話し合う CakePHP について話し合う Sep 10, 2024 pm 05:28 PM

CakePHP について話し合う

CakePHP クイックガイド CakePHP クイックガイド Sep 10, 2024 pm 05:27 PM

CakePHP クイックガイド

PHP 開発用に Visual Studio Code (VS Code) をセットアップする方法 PHP 開発用に Visual Studio Code (VS Code) をセットアップする方法 Dec 20, 2024 am 11:31 AM

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

See all articles