Warning: Cannot modify header information - headers already sent by (output started at C:\Program Files\xampp\htdocs\regist.php:7)
in C:\Program Files\xampp\htdocs\regist.php on line 28
というエラーが表示されます。
line28には
header("Location: home.php");
と記載しております。
記述に問題はないように思うのですが
何か問題なのかがわかりません。
どなたかアドバイスいただければと思います。
line28 の
header("Location: home.php");
よりも前の行にて、既に何かを出力しているため、header 関数が使えないという意味のエラーです。
覚えておいて頂きたいのは、header() 関数は、 通常の HTML タグまたは PHP からの出力にかかわらず、すべての実際の 出力の前にコールする必要があることです。 頻出するエラーとして、include() または require() 関数、他のファイルをアクセスする関数に 空白または空行があり、header() の前に出力が 行われてしまうというものがあります。同じ問題は、単一の PHP/HTML ファイルを使用している場合でも存在します。
ですがheaderの前になにかあると使えないということは
何も出来ないわけではありません。
ユーザーに対して出力できないだけで、裏で何か(ファイルに書き込み等)する分には問題ありません。
header の前に echo で出力をしていたり、PHP の開始タグ
<?
の前に空白等が入っていませんか?
また、header で飛ばしてから色々する分にも特に問題はありません。
空白行とかそのあたりはないですね。
念のためにエラーが出るファイルの中身を
header("Location: home.php");
?>
の3行だけにしてもエラーが出ます。
ますますわからないです・・・
Warning: Cannot modify header information - headers already sent by (output started at C:\Program Files\xampp\htdocs\regist.php:7)
in C:\Program Files\xampp\htdocs\regist.php on line 28
以下訳
警告:header情報を変更することは出来ません - ヘッダー情報は以下で既に送信済みです。(出力がC:\Program Files\xampp\htdocs\regist.php:7 で開始されています。)
C:\Program Files\xampp\htdocs\regist.php on line 28
でのエラーです。
という訳で、C:\Program Files\xampp\htdocs\regist.phpの7行目をコメントすればエラーは出なくなる。
直すとすれば、手っ取り早いのは、
ありがとうございます。
7行目には
//説明
しかないので削ってみましたが
特に変化はありませんでした。
headerはあきらめてJavascriptか何かで
飛ばそうかと考え中です。
headers_sentを使って『本当にヘッダが既に返されているのか?』を調べてみてはどうでしょう。
ありがとうございます。
これで送られているかそうでないかの判断をつけることができます。
参考にさせていただきます。
確か「Location:」で飛ばす場合は、完全なURLでないとダメ(= 相対パスではダメ)だったような気がします。
<?php header("Location: http://example.com/home.php"); ?>
ではどうでしょうか。
(上記「example.com」の部分は実際のドメインに置き換えて下さい)
ためしにフルパスでやってみましたが
やはりダメでした。
1から作成してみようかと思います。
ありがとうございました。
すでに解決済みかもしれませんが、参考まで。
7行目には
//説明
しかないので削ってみましたが
特に変化はありませんでした。
についてですが、// は、全角なんでしょうか?
以下のように変更したときに、ブラウザ(ソース表示)には、どのように表示されますか?
変更後:
[<?php
// 説明
:
//header("Location: home.php");
?>]
※ このとき、ブラウザ(ソース表示)には、"[]" のみが表示されますか?
また、インクルードを利用するとき、
<?php include("func1.php"); ?>
<?php include("func2.php"); ?>
<?php
header('hogehoge.php');
?>
と書かれている場合は、以下のように変更が必要です。
変更後:
<?php include("func1.php");
?><?php include("func2.php");
?><?php
header('hogehoge.php');
?>
上記のような変更後も、
func1.php ファイルに改行が含めてはいけません。
<?php
// 共通関数
:
?>
[EOF]
とされている場合は、以下のように、改行を含めないようにする必要があります。
変更後:
<?php
// 共通関数
:
?>[EOF]
[EOF]は、ファイルの終了を示しています。
インクルードするファイルの最後に改行が含まれてると、その後、にheader の送信することは出来ないはずです。
参考まで。
ありがとうございます。
これを参考にやらせていただきます。
うまくいったら結果を報告できればと思います。
なるほどそういうことなんですね。
現在別のファイルから来たデータをテキストに書き込んでから
Locationで元のページに飛ばそうと思ったのですが
そうなるとLocationは使えないのでほかの方法で元のページに戻る必要があるということですね。
ですがheaderの前になにかあると使えないということは
結構使用できる場面というのは限られてきそうですね。
何かいい案があればいいんですが・・・。