Web aym.pekori.to

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

導入

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

要件

外部ライブラリを必要としません。

インストール手順

PHP コアに含まれるため、 追加のインストール無しで使用できます。

実行時設定

php.ini の設定により動作が変化します。

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

名前デフォルト変更の可否変更履歴
output_buffering"0"PHP_INI_PERDIR 
output_handlerNULLPHP_INI_PERDIRPHP 4.0.4 以降で使用可能です。
implicit_flush"0"PHP_INI_ALLPHP <= 4.2.3 では PHP_INI_PERDIR です。
PHP_INI_* 定数の詳細および定義については 付録G を参照してください。

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

output_buffering boolean/integer

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

output_handler string

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

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

注意: このディレクティブには、組み込み関数のみが使用可能です。ユーザ定義の 関数については、ob_start() を使用してください。

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 --  現在のバッファの内容を取得し、出力バッファを削除する
ob_get_contents --  出力用バッファの内容を返す
ob_get_flush --  出力バッファをフラッシュし、 その内容を文字列として返した後で出力バッファリングを終了する
ob_get_length --  出力バッファの長さを返す
ob_get_level --  出力バッファリング機構のネストレベルを返す
ob_get_status --  出力バッファのステータスを取得する
ob_gzhandler --  出力バッファを gzip 圧縮するための ob_start コールバック関数
ob_implicit_flush --  自動フラッシュをオンまたはオフにする
ob_list_handlers --  使用中の出力ハンドラの一覧を取得する
ob_start -- 出力のバッファリングを有効にする
output_add_rewrite_var --  URL リライタの値を追加する
output_reset_rewrite_vars --  URL リライタの値をリセットする