pgintro.net

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の代わりに数値を設定することにより、バッファの最大サイズを指定可能です。