ホームページ  >  記事  >  php教程  >  PHP キャッシュ メカニズム: 出力制御

PHP キャッシュ メカニズム: 出力制御

WBOY
WBOYオリジナル
2016-06-21 08:49:501417ブラウズ

1. 実行時設定 (php.ini)
出力バッファリング = オフ
display_errors = オン

2. 機能説明
(1) bool ob_start ([ callback $output_callback [, int $chunk_size [, bool $erase ]]] )
この関数は出力バッファを開きます。出力バッファリングがアクティブな場合、スクリプトから出力を送信することはできません (http ヘッダーを除く)。代わりに、出力コンテンツは内部バッファーに保存されます。内部バッファの内容は、ob_get_contents() 関数を使用して文字列変数にコピーできます。内部バッファに格納された内容を出力するには、ob_end_flush() 関数を使用します。さらに、ob_end_clean() 関数を使用すると、バッファの内容が黙って破棄されます。


01

02 function callback($buffer) {

03 // replace all the apples with oranges

04 return (str_replace("apples", "oranges", $buffer));

05 }

06 ob_start("callback");

07 ?>

08

09

10

It's like comparing apples to oranges.

11

12

13

14 ob_end_flush();

15 ?>

16  

17 输出:

18

19

20

It's like comparing oranges to oranges.

21

22

(2) 文字列 ob_get_contents (void)
出力バッファの内容を取得するだけでクリアしません。出力バッファが無効な場合は FALSE を返します。


01

02 ob_start();

03

04 echo "Hello ";

05 $out1 = ob_get_contents();

06

07 echo "World";

08 $out2 = ob_get_contents();

09

10 ob_end_clean();

11 var_dump($out1, $out2);

12 ?>

13 输出:string(6) "Hello " string(11) "Hello World"

14  

15

16 //Level 0

17 ob_start();

18 echo "Hello ";

19

20 //Level 1

21 ob_start();

22 echo "Hello World";

23 $out2 = ob_get_contents();

24 ob_end_clean();

25

26 //Back to level 0

27 echo "Galaxy";

28 $out1 = ob_get_contents();

29 ob_end_clean();

30

31 //Just output

32 var_dump($out1, $out2);

33 ?>

34 输出:string(12) "Hello Galaxy" string(11) "Hello World"

(3) int ob_get_length (void)
出力バッファの内容の長さを返します。アクティブなバッファがない場合は FALSE を返します。


1

2 ob_start();

3 echo "Hello ";

4 $len1 = ob_get_length();

5 echo $len1;

6 ?>

7 输出:6

(4) int ob_get_level (void)
ネストされた出力バッファ ハンドラのレベルを返します。出力バッファリングが使用できない場合は 0 を返します。


01

02 echo ob_get_level(); // --> 1

03 ?>

04

05 ob_end_clean();

06 echo ob_get_level(); // --> 0

07 ?>

08

09 echo ob_get_level(); // 1

10 ob_start();

11 echo "Hello ";

12 echo ob_get_level(); // 2

13

14 ob_start();

15 echo "Hello World";

16 echo ob_get_level(); // 3

17 $out2 = ob_get_contents();

18 ob_end_clean();

19

20 echo "Galaxy";

21 $out1 = ob_get_contents();

22 ob_end_clean();

23 echo ob_get_level(); // 1

24

25 var_dump($out1, $out2);

26 ?>

27 输出:11string(13) "Hello 2Galaxy" string(12) "Hello World3"

(5) 文字列 ob_get_clean (void)
現在のバッファの内容を取得し、現在の出力バッファを削除します。出力バッファがアクティブでない場合は FALSE を返します。
Ob_get_clean() は基本的に ob_get_contents() と ob_end_clean() を一緒に実行します。


01

02 ob_start();

03 echo "1";

04 $content = ob_get_clean();

05

06 ob_start(); // This is NECESSARY for the next ob_get_clean() to work as intended.

07 echo "2";

08 $content .= ob_get_clean();

09

10 echo $content;

11 ?>

12 输出: 12


(6) bool ob_end_clean (void)
この関数は、最上位の出力バッファの内容を破棄し、バッファを閉じます。バッファの内容をさらに処理したい場合は、ob_end_clean() を呼び出すとバッファの内容が破棄されるため、ob_end_clean() の前に ob_get_contents() を呼び出す必要があります。
戻り値: 成功した場合は TRUE、失敗した場合は FALSE。 エラーの最初の理由は、呼び出し時にアクティブなバッファーがないか、何らかの理由でバッファー (おそらく特殊なバッファーの場合) を削除できないことです。
エラー/例外: 関数が失敗すると、E_NOTICE 例外が発生します。

(7) 文字列 ob_get_flush (void)
出力バッファの内容を返し、出力バッファを閉じます。アクティブな出力バッファがない場合は、FALSE を返します。


01

02 //using output_buffering=On

03 print_r(ob_list_handlers());

04

05 //save buffer in a file

06 $buffer = ob_get_flush();

07 file_put_contents('buffer.txt', $buffer);

08

09 print_r(ob_list_handlers());

10 ?> 输出: Array (     [0] => default output handler ) Array ( )

(8) bool ob_end_flush (void)
この関数は、トップレベルのバッファーの内容を送信し (コンテンツがある場合)、バッファーを閉じます。バッファの内容をさらに処理したい場合は、ob_end_flush() を呼び出した後にバッファの内容が破棄されるため、ob_end_flush() の前に ob_get_contents() を呼び出す必要があります。
注: この関数は、ob_get_flush() がバッファの内容を文字列として返すことを除いて、ob_get_flush() に似ています。
戻り値: 成功した場合は TRUE、失敗した場合は FALSE。エラーの理由は、呼び出し時に機能しているバッファがないか、何らかの理由でバッファを削除できないことです (おそらく特殊なバッファのため)。 。
エラー/例外: 関数が失敗すると、E_NOTICE 例外が発生します。

(9) void ob_clean (void)
この関数は、出力バッファの内容を破棄するために使用されます。
この関数は出力バッファを破壊しませんが、ob_end_clean() のような関数は出力バッファを破壊します。

(10) void ob_flush (ボイド)
この関数は、バッファーの内容を送信します (内容がある場合)。バッファの内容をさらに処理したい場合は、ob_flush() を呼び出した後にバッファの内容が破棄されるため、ob_flush() の前に ob_get_contents() を呼び出す必要があります。
この関数は出力バッファを破壊しませんが、ob_end_flush() のような関数はバッファを破壊します。

(11) ボイドフラッシュ(ボイド)
PHP が実行される環境 (CGI、Web サーバーなど) に関係なく、PHP プログラムのバッファをリフレッシュします。この関数は、これまでのプログラムの出力をすべてユーザーのブラウザに送信します。
flash() 関数は、サーバーまたはクライアントのブラウザーのキャッシュ モードには影響しません。したがって、出力バッファをフラッシュするには、ob_flush() 関数と flash() 関数の両方を使用する必要があります。
一部の Web サーバー プログラム、特に Win32 での Web サーバー プログラムは、結果をブラウザーに送信する前に、プログラムの終了までスクリプトの出力をキャッシュします。
mod_gzip などの一部の Apache モジュールは、独自の出力をキャッシュする場合があり、これにより、flush() 関数によって生成された結果がクライアント ブラウザにすぐに送信されなくなります。ブラウザでも、受信したコンテンツを表示する前にキャッシュします。たとえば、Netscape ブラウザは、改行または HTML タグの先頭を受け取るまでコンテンツをキャッシュし、 タグを受け取るまでテーブル全体を表示しません。
Microsoft Internet Explorer の一部のバージョンでは、256 バイトを受信した後にのみページの表示が開始されるため、これらのブラウザでページのコンテンツを表示できるようにするには、追加のスペースを送信する必要があります。



3. まとめ
lush — 出力バッファをフラッシュします
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_start — 出力制御バッファーをオープンします



声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。