PHP: 出力制御関数(output control) - Manual
PHP  
downloads | documentation | faq | getting help | mailing lists | | php.net sites | links | my php.net 
search for in the  
<ovrimos_rollbackflush>
view the version of this page
Last updated: Tue, 21 Dec 2004

LXXXV. 出力制御関数(output control)

導入

出力制御関数により、スクリプトから送信される出力を制御することが可 能になります。この機能は、複数の異なった場面、特にスクリプトがデー タ出力を開始した後にヘッダをブラウザに送信する必要がある場合に有用 です。出力制御関数は、header() または setcookie()を使用して送信されたヘッダには作用せ ず、echo() のような関数とPHPコードのブロック間 のデータにのみ作用します。

要件

これらの関数は、標準モジュールの一部として利用可能であり、常に使用できます。

インストール手順

これらの関数はPHPコアに含まれるため、使用す る際にインストールは不要です。

実行用の設定

これらの関数の動作は、php.iniの設定により変化します。

表 1. 出力制御設定オプション

名前デフォルト変更の可否
output_buffering"0"PHP_INI_PERDIR|PHP_INI_SYSTEM
output_handlerNULLPHP_INI_PERDIR|PHP_INI_SYSTEM
implicit_flush"0"PHP_INI_PERDIR|PHP_INI_SYSTEM
PHP_INI_* 定数の詳細と定義については、 ini_set()を参照して下さい。

以下に設定ディレクティブの簡単な説明を示します。

output_buffering boolean/integer

このディレクティブを'On'と設定することにより、全てのファイルに関 して出力バッファリングを有効にすることができます。 特定の大きさにバッファの大きさを制限したい場合、このディレクティ ブの値として'On'の代わりに最大バイト数(例:output_buffering=4096) を使用することができます。

output_handler string

スクリプトの全ての出力を関数にリダイレクトすることができます。 例えば、output_handlerにmb_output_handler()を 指定した場合、文字エンコーディングは透過的に指定したエンコーディ ングに変換されます。出力ハンドラを指定することにより自動的に出力 バッファリングをonにします。

注意: ob_inconv_handler()mb_output_handler()の両方で使用することはで きません。また、 ob_gzhandler()zlib.output_compression の両方を使用することはできません。

implicit_flush boolean

デフォルトはFALSEです。これをTRUE変更にすると、PHPが 各出力ブロックの後で自動的に出力レイヤをフラッシュするよう指定し ます。これは、各print()および HTMLブロックの後で flush()関数をコールすることと等価です。

Web環境の中でPHPを使用している時、 このオプションをonに変更すると、著しい性能低下が生じるため、 通常はデバッグ目的のみにすることが推奨されます。CLI SAPIのもとで実行される時、この値はデフォルトでTRUEに なっています。

ob_implicit_flush()も参照して下さい。

リソース型

この拡張モジュールはリソース型を全く定義しません。

定義済みの定数

この拡張モジュールは定数を全く定義しません。

例 1. 出力制御の例

<?php

ob_start
();
echo
"Hello\n";

setcookie("cookiename", "cookiedata");

ob_end_flush();

?>

上記の例では、echo()からの出力は、 ob_end_flush() がコールされるまで出力バッファに 保存されます。この際、 setcookie()をコールするとエラーを発生することな くクッキーが保存されます。(通常、データの送信後はブラウザにヘッダ を送信することはできません。)

注意: PHP 4.1 (および4.2)から4.3に更新する際、前のバージョンのバグのせ いで、php.iniimplict_flushOFFにする必要があります。さもないと、 ob_start()を使用する全ての出力は、出力を抑制 することができなくなります。

以下も参照下さい

header()およびsetcookie() も参照下さい。

目次
flush -- 出力バッファをフラッシュする
ob_clean --  出力バッファをクリア(消去)する
ob_end_clean --  出力用バッファをクリア(消去)し、出力のバッファリングをオフにする
ob_end_flush --  出力用バッファをフラッシュ(送信)し、出力のバッファリングをオフに する
ob_flush --  出力バッファをフラッシュ(送信)する
ob_get_clean --  Get current buffer contents and delete current output buffer
ob_get_contents --  出力用バッファの内容を返す
ob_get_flush --  Flush the output buffer, return it as a string and turn off output buffering
ob_get_length --  出力バッファの長さを返す
ob_get_level --  出力バッファリング機構のネストレベルを返す
ob_get_status --  Get status of output buffers 出力バッファのステータスを取得する
ob_gzhandler --  出力バッファをgzip圧縮するためのob_startコールバック関数
ob_implicit_flush --  自動フラッシュをオンまたはオフにする
ob_list_handlers --  List all output handlers in use
ob_start -- 出力のバッファリングを有効にする
output_add_rewrite_var --  Add URL rewriter values
output_reset_rewrite_vars --  Reset URL rewriter values


add a note add a note User Contributed Notes
出力制御関数(output control)
gruik at libertysurf dot fr
10-Jul-2004 12:53
For those who are looking for optimization, try using buffered output.

I noticed that an output function call (i.e echo()) is somehow time expensive. When using buffered output, only one output function call is made and it seems to be much faster.
Try this :

<?php
your_benchmark_start_function
();

for (
$i = 0; $i < 5000; $i++)
   echo
str_repeat ("your string blablabla bla bla", (rand() % 4) + 1)."<br>\n";

echo
your_benchmark_end_function();
?>

And then :

<?php
your_benchmark_start_function
();

ob_start ();
for (
$i = 0; $i < 5000; $i++)
   echo
str_repeat ("your string blablabla bla bla", (rand() % 4) + 1)."<br>\n";

echo
your_benchmark_end_function();
ob_end_flush ();
?>
nobbie @t php d0t net
01-Apr-2004 12:49
There is a problem in MSIE 5.5,6 with regards to Page compression. Users might experience pages not loading completely, or just a blank page.

This articles you are looking for is what you're looking for:
 Microsoft Knowledge Base Article - 312496 (for MSIE 6)
 Microsoft Knowledge Base Article - 313712 (for MSIE 5.5)

It states that you should upgrade to the latest MSIE Service Pack to fix the following problem:

Internet Explorer May Lose the First 2,048 Bytes of Data That Are Sent Back from a Web Server That Uses HTTP Compression
tijmen
09-Jul-2003 11:44
Trying to benchmark your server when using output_buffering ?
Don't forget that the value 4096 in the php.ini will give you complete different loadtimes compares to the value of 1.
In the first case the output will be sent after buffering 4096 and the loadtime timed at the end of the page will contain the loadtime needed to download the complete page in the clientbrowser while the second value will contain the loadtime needed to place the complete page in the buffer. The time needed for sending is not clocked.
This can be very frustrating if you don't see the differance between server and the 1st is using 4096 instead of 1.
Although technically much faster than the second server the second server was providing much better loadtime results.
This result will grow when using large amounts of output.
But this becomes interesting if you want to measure the time needed for the page to be loaded for the client.
philip at thepr()jects dot ()rg
08-Feb-2001 07:17
A few tutorials exist on this subject :

*
*

<ovrimos_rollbackflush>
 Last updated: Tue, 21 Dec 2004
show source | credits | sitemap | contact | advertising | mirror sites 
Copyright © 2001-2005 The PHP Group
All rights reserved.
This unofficial mirror is operated at: /
Last updated: Mon Mar 14 08:13:06 2005 Local time zone must be set--see zic manual page