Warning: Cannot modify header information…. のエラーメッセージが発生時の対処方法
Warning: Cannot modify header information…. のエラーメッセージが発生時の対処方法
この開発のきっかけ
お問い合わせのフォーム制作の際に、こんなエラー文を目にした方もいると思います。
Warning: Cannot modify header information…
これは様々な原因があります。
今からご紹介するのはその原因と、対策対処法をお伝えしようと思います。
その① header()関数の前に改行や余白、出力がある
<form class="form_contact" method="post" action="./contact?confirm" enctype="multipart/form-data">
//ケース1
<?php
echo 'エコー';
header('Location: https://ryoheiobayashi.com/');
?>
//ケース2
<?php
//空白、改行
header('Location: https://ryoheiobayashi.com/');
?>
上記の記述だと「Warning: Cannot modify header information…」が発生する。
//お問い合わせページのtitleタグの動的にする方法
<?php
header('Location: https://ryoheiobayashi.com/');
echo 'エコー';
?>
headerより前にecho 'エコー'や空白を入れた事が原因だったので「Warning: Cannot modify header information…」のエラーが消えます。
その② php.iniのoutput_bufferingをoffからonにする
//修正前
output_buffering = Off
//修正後
output_buffering = ON
上記のように変更するとエラーが消えます。
その③ ob_start();にする
<?php
ob_start();
?>
この一文を入れるだけです。
ちなみに私が愛用しているTransmitMail(https://github.com/dounokouno/TransmitMail)
という無料テンプレートフォームもたまにindex.phpに対してheaderとfooterをincludeした状態で色々書くと「Warning: Cannot modify header information…」のエラーが起きます。
なので私は③の方法を使って対応いたしました。
<?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';
?>
参考にしたサイト
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-〜の解決/「Warning: Cannot modify header information…」エラーの解決方法[PHP]
https://kotori-blog.com/php/cmhi_error/
まとめ
Warning: Cannot modify header information…は、かなり厄介なエラーなので、
あまりサーバー周りを弄らないコーダーやマークアップエンジニア、フロントエンドエンジニアなどの方は是非、このエラーには注意してください!!
Discussion