phpのheader()を使った際に、Warning: Cannot modify header information – headers already sent by 〜で出ちゃって困った事。

  • このエントリーをはてなブックマークに追加
  • LINEで送る

こんな風に、postにデータが入って無い時は弾こうとしたとき
[php]
<?php
$str = $_POST["hantei"];
if($str == ""){
header(‘location: login.php’);
exit();
}
?>
[/php]

ローカルでCannot modify header informationになりました。

これはheader()より先に何かが出力されている事が原因のエラーみたいなんだけど、
変数への代入は関係ないみたいだし、謎な改行も空白行無いし、BOMも付いてないしで
改行消してみたり、ファイルの保存方法を見なおしたりでは上記ソースのエラーを消せませんでした。

で、実際にエラーを消せた方法

1)php.iniのoutput_bufferingをonにする。

MAMPのphp.iniは
[text]
/Applications/MAMP/bin/php/php[バージョン]/conf/php.ini[/text]
にあります。

見てみると
output_buffering = Off になっていたので
output_buffering = On に変更しました。

その後、MAMPを再起動して確認するとlocationで指定したページへ飛んでくれました。やった!

2)ob_start();を使う。

output_buffering = Offのままob_start();を挿入してもいけました。やった!

[php]
<?php
ob_start();
$str = $_POST["hantei"];
if($str == ""){
header(‘location: login.php’);
exit();
}
?>
[/php]

PHP: ob_start – Manual

使い方あってるのかな。

  • このエントリーをはてなブックマークに追加
  • LINEで送る

SNSでもご購読できます。

コメント

コメントを残す


You can add images to your comment by clicking here.