《PHP8上級試験対策》出力バッファリングでヘッダ操作を安全に行う方法

  • URLをコピーしました!

はじめに

PHP では setcookie()header() のようなヘッダ操作関数は、画面出力前に呼び出す必要があります。しかし、テストや開発中に echo などで出力してしまい、よく「Cannot modify header information」のエラーに遭遇することがあります。

本記事では、PHP の 出力バッファリング (ob_start()) を使ってヘッダ操作を安全に行う方法と、ob_end_flush() / ob_end_clean() の違いをわかりやすく解説します。

キーワード: / 出力バッファリング / ob_start / ob_end_flush / ob_end_clean / setcookie / header /

目次

出力バッファリングとは?

  • ob_start() でバッファリング開始
  • 出力は一旦メモリにためられ、ブラウザには送信されない
  • ヘッダ操作関数は出力前に呼び出せる

ob_end_flush() と ob_end_clean() の違い

例:ob_end_flush()

<?php
ob_start();
echo 'text';
setcookie('exam', 'value');
ob_end_flush();
  • 出力 'text' が画面に表示
  • Cookie も正常に設定
  • ✅ 安全

例:ob_end_clean()

<?php
ob_start();
echo 'text';
setcookie('exam', 'value');
ob_end_clean();
  • 出力は破棄される(画面には表示されない)
  • Cookie は設定される場合もあるが、既に出力がある場合は Warning が出る可能性あり
  • ⚠️完全に安全とは言えない(とりあえず使える)

図解:処理の流れ

ob_start() → echo → setcookie() → ob_end_flush() → 画面に表示 & Cookie設定
ob_start() → echo → setcookie() → ob_end_clean() → 画面には表示されず、Cookie設定は場合による

まとめ

  • 出力バッファリングは「ヘッダ操作を安全にする保険」
  • ob_end_flush() でバッファを出力する
  • ob_end_clean() はバッファを破棄するだけで、ヘッダ操作の安全性は保証されない
  • 上級試験では、ヘッダ関数は出力前に呼ぶ のが基本

この記事が気に入ったら
いいねしてね!

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次