はじめに
PHPの出力は通常ブラウザに直接送信されますが、ob_start()
を使うと 一時的にバッファにためて加工してから出力 することができます。上級試験でもよく出題されるテーマです。
目次
ob_start() の基本
ob_start(?callable $callback = null, int $chunk_size = 0, int $flags = PHP_OUTPUT_HANDLER_STDFLAGS): bool
- $callback : 出力バッファがフラッシュされる際に呼ばれる関数
- $chunk_size : バッファサイズ(0なら制限なし)
- $flags : 出力ハンドラのフラグ
コールバック関数の動作
ob_start(function($buffer){
return "buf is '{$buffer}' .";
});
echo 'text';
ob_end_flush();
動作の流れ
ob_start()
で出力バッファを開始echo 'text';
→ バッファに文字列が入るob_end_flush()
が呼ばれ- バッファをフラッシュ(出力)するタイミングで callback が呼ばれる。
- $buffer = ‘text’ が callback に渡される。
- callback は “buf is ‘text’ .” を返す。
- 結果、ブラウザ(あるいは標準出力)に
"buf is 'text' ."
が出力される
結果
buf is 'text' .
まとめ
ob_start()
は出力を一時的にバッファリングできる- コールバック関数で 出力を加工してから送信 できる
- 上級試験では バッファのフラッシュタイミングとコールバックの返り値 がポイント