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 — 出力制御バッファーをオープンします