出力制御関数により、スクリプトから送信される出力を制御することが可 能になります。この機能は、複数の異なった場面、特にスクリプトがデー タ出力を開始した後にヘッダをブラウザに送信する必要がある場合に有用 です。出力制御関数は、header() または setcookie()を使用して送信されたヘッダには作用せ ず、echo() のような関数とPHPコードのブロック間 のデータにのみ作用します。
これらの関数の動作は、php.iniの設定により変化します。
表 1出力制御設定オプション
名前 | デフォルト | 変更の可否 |
---|---|---|
output_buffering | "0" | PHP_INI_PERDIR|PHP_INI_SYSTEM |
output_handler | NULL | PHP_INI_PERDIR|PHP_INI_SYSTEM |
implicit_flush | "0" | PHP_INI_PERDIR|PHP_INI_SYSTEM |
以下に設定ディレクティブの簡単な説明を示します。
このディレクティブを'On'と設定することにより、全てのファイルに関 して出力バッファリングを有効にすることができます。 特定の大きさにバッファの大きさを制限したい場合、このディレクティ ブの値として'On'の代わりに最大バイト数(例:output_buffering=4096) を使用することができます。
スクリプトの全ての出力を関数にリダイレクトすることができます。 例えば、output_handlerにmb_output_handler()を 指定した場合、文字エンコーディングは透過的に指定したエンコーディ ングに変換されます。出力ハンドラを指定することにより自動的に出力 バッファリングをonにします。
注意 ob_inconv_handler()と mb_output_handler()の両方で使用することはで きません。また、 ob_gzhandler()と zlib.output_compression の両方を使用することはできません。
デフォルトはFALSEです。これをTRUE変更にすると、PHPが 各出力ブロックの後で自動的に出力レイヤをフラッシュするよう指定し ます。これは、各print()および HTMLブロックの後で flush()関数をコールすることと等価です。
Web環境の中でPHPを使用している時、 このオプションをonに変更すると、著しい性能低下が生じるため、 通常はデバッグ目的のみにすることが推奨されます。CLI SAPIのもとで実行される時、この値はデフォルトでTRUEに なっています。
ob_implicit_flush()も参照して下さい。
上記の例では、echo()からの出力は、 ob_end_flush() がコールされるまで出力バッファに 保存されます。この際、 setcookie()をコールするとエラーを発生することな くクッキーが保存されます。(通常、データの送信後はブラウザにヘッダ を送信することはできません。)
注意 PHP 4.1 (および4.2)から4.3に更新する際、前のバージョンのバグのせ いで、php.iniのimplict_flushを OFFにする必要があります。さもないと、 ob_start()を使用する全ての出力は、出力を抑制 することができなくなります。
header()およびsetcookie() も参照下さい。