PHP Cannot modify header information エラー
作成日時:2019/06/14
更新日時:2019/06/14
スポンサーリンク
この記事の確認環境
phpversion() : 7.2.7
エラー概要
https://www.php.net/manual/ja/function.header.php
header() 関数呼び出し前に出力行うと発生します。
エラーメッセージ
PHP Warning: Cannot modify header information
Warningが発生するコード例
header関数呼び出し以前にecho関数等で出力を行う
<?php $response = 3; echo "TEST"; header("Content-Type: application/json"); die(json_encode($response));
<?php前に空白が含まれる
<?php $response = 3; header("Content-Type: application/json"); die(json_encode($response));
<?php前に改行が含まれる
<?php $response = 3; header("Content-Type: application/json"); die(json_encode($response));
ファイルの文字コードがBOM付きになっている
以下のコードはWarningが発生しないコードですが、BOM付きで保存されている場合はWarningが発生します。
<?php $response = 3; header("Content-Type: application/json"); die(json_encode($response));
Warningの回避方法
ob_start()及びob_end_flush()を使用し出力をバッファリングする
ob_start() - https://www.php.net/manual/ja/function.ob-start.php
ob_end_flush() - https://www.php.net/manual/ja/function.ob-end-flush.php
ob_start()及びob_end_flush()を使用し出力をバッファリングすることにより、header()呼び出し以前に出力が行われないようにします
<?php $response = 3; ob_start(); echo "TEST"; header("Content-Type: application/json"); ob_end_flush(); die(json_encode($response));
設定ファイルのoutput_buffering設定を変更する
https://www.php.net/manual/ja/outcontrol.configuration.php
output_bufferingをOnに設定すると、すべてのファイルで出力のバッファリングが有効になるため、ob_start()を使用しない形でもWarningが発生しません。
output_bufferingはOnの代わりに数値を設定することにより、バッファの最大サイズを指定可能です。