👩‍💻

Warning: Cannot modify header information…. のエラーメッセージが発生時の対処方法

2022/10/17に公開

Warning: Cannot modify header information…. のエラーメッセージが発生時の対処方法

この開発のきっかけ

お問い合わせのフォーム制作の際に、こんなエラー文を目にした方もいると思います。

sample.php

Warning: Cannot modify header information…

これは様々な原因があります。
今からご紹介するのはその原因と、対策対処法をお伝えしようと思います。

その① header()関数の前に改行や余白、出力がある

sample.php

<form class="form_contact" method="post" action="./contact?confirm" enctype="multipart/form-data">

sample.php

//ケース1

<?php 
echo 'エコー'; 
header('Location: https://ryoheiobayashi.com/'); 
?>

//ケース2

<?php 
//空白、改行 
header('Location: https://ryoheiobayashi.com/'); 
?>

上記の記述だと「Warning: Cannot modify header information…」が発生する。

sample.php

//お問い合わせページのtitleタグの動的にする方法

<?php 
 header('Location: https://ryoheiobayashi.com/');
 echo 'エコー'; 
?>

headerより前にecho 'エコー'や空白を入れた事が原因だったので「Warning: Cannot modify header information…」のエラーが消えます。

その② php.iniのoutput_bufferingをoffからonにする

php.ini

//修正前

output_buffering = Off

//修正後

output_buffering = ON

上記のように変更するとエラーが消えます。

その③ ob_start();にする

sample.php

<?php
ob_start();
?>

この一文を入れるだけです。

ちなみに私が愛用しているTransmitMail(https://github.com/dounokouno/TransmitMail)
という無料テンプレートフォームもたまにindex.phpに対してheaderとfooterをincludeした状態で色々書くと「Warning: Cannot modify header information…」のエラーが起きます。

なので私は③の方法を使って対応いたしました。

index.php

<?php
ob_start();

require_once '../TransmitMail/lib/TransmitMail.php';

$tm = new TransmitMail();
$tm->init('config/config.php');

include '../common/header.php';
$tm->run();
include '../common/footer.php';
?>

参考にしたサイト

  1. Warning: Cannot modify header information – headers already sent by
    http://funkyboys7.com/blog7/2016/11/02/phpのheaderを使った際に、warning-cannot-modify-header-information-headers-already-sent-by-〜の解決/

  2. 「Warning: Cannot modify header information…」エラーの解決方法[PHP]
    https://kotori-blog.com/php/cmhi_error/

まとめ

Warning: Cannot modify header information…は、かなり厄介なエラーなので、
あまりサーバー周りを弄らないコーダーやマークアップエンジニア、フロントエンドエンジニアなどの方は是非、このエラーには注意してください!!

Discussion