PHPでの質問です。


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");
と記載しております。
記述に問題はないように思うのですが
何か問題なのかがわかりません。
どなたかアドバイスいただければと思います。

回答の条件
  • 1人2回まで
  • 登録:
  • 終了:2007/01/16 00:05:20
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

回答6件)

id:inokuni No.1

回答回数1343ベストアンサー獲得回数21

ポイント19pt

line28 の

header("Location: home.php");

よりも前の行にて、既に何かを出力しているため、header 関数が使えないという意味のエラーです。


http://jp2.php.net/header

覚えておいて頂きたいのは、header() 関数は、 通常の HTML タグまたは PHP からの出力にかかわらず、すべての実際の 出力の前にコールする必要があることです。 頻出するエラーとして、include() または require() 関数、他のファイルをアクセスする関数に 空白または空行があり、header() の前に出力が 行われてしまうというものがあります。同じ問題は、単一の PHP/HTML ファイルを使用している場合でも存在します。

id:quocard

なるほどそういうことなんですね。

現在別のファイルから来たデータをテキストに書き込んでから

Locationで元のページに飛ばそうと思ったのですが

そうなるとLocationは使えないのでほかの方法で元のページに戻る必要があるということですね。

ですがheaderの前になにかあると使えないということは

結構使用できる場面というのは限られてきそうですね。

何かいい案があればいいんですが・・・。

2007/01/12 22:56:00
id:b-wind No.2

回答回数3344ベストアンサー獲得回数440

ポイント19pt

ですがheaderの前になにかあると使えないということは

何も出来ないわけではありません。

ユーザーに対して出力できないだけで、裏で何か(ファイルに書き込み等)する分には問題ありません。


header の前に echo で出力をしていたり、PHP の開始タグ

<?

の前に空白等が入っていませんか?


また、header で飛ばしてから色々する分にも特に問題はありません。

id:quocard

空白行とかそのあたりはないですね。

念のためにエラーが出るファイルの中身を

header("Location: home.php");

?>

の3行だけにしてもエラーが出ます。

ますますわからないです・・・

2007/01/12 23:37:22
id:PaulYamamoto No.3

回答回数113ベストアンサー獲得回数2

ポイント18pt

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行目をコメントすればエラーは出なくなる。


直すとすれば、手っ取り早いのは、

  1. 28行目を7行目の前に持ってくる。
  2. 7行目を29行目以降に書く。
id:quocard

ありがとうございます。

7行目には

//説明

しかないので削ってみましたが

特に変化はありませんでした。

headerはあきらめてJavascriptか何かで

飛ばそうかと考え中です。

2007/01/13 09:50:38
id:kn1967 No.4

回答回数2915ベストアンサー獲得回数301

ポイント18pt

headers_sentを使って『本当にヘッダが既に返されているのか?』を調べてみてはどうでしょう。

http://search.net-newbie.com/php/function.headers-sent.html

id:quocard

ありがとうございます。

これで送られているかそうでないかの判断をつけることができます。

参考にさせていただきます。

2007/01/16 00:03:54
id:chankaz No.5

回答回数53ベストアンサー獲得回数3

ポイント18pt

確か「Location:」で飛ばす場合は、完全なURLでないとダメ(= 相対パスではダメ)だったような気がします。

<?php
header("Location: http://example.com/home.php");
?>

ではどうでしょうか。

(上記「example.com」の部分は実際のドメインに置き換えて下さい)

id:quocard

ためしにフルパスでやってみましたが

やはりダメでした。

1から作成してみようかと思います。

ありがとうございました。

2007/01/16 00:04:42
id:openseed No.6

回答回数51ベストアンサー獲得回数6

ポイント18pt

すでに解決済みかもしれませんが、参考まで。

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 の送信することは出来ないはずです。

参考まで。

id:quocard

ありがとうございます。

これを参考にやらせていただきます。

うまくいったら結果を報告できればと思います。

2007/01/16 00:05:12
  • id:nikutaiha
    このQ&A見ながら悪戦苦闘して、結局出来なかったものです。


    ファイルをUTF-8で保存してたのですが、BOM有りにしてました。
    BOMなしで保存してみたら、エラー消えました。
    嬉しかったので書き込んでしまいます。
  • id:lemonjp
    私もheaders already sent byのWarning:で悩んでおりまして
    仰るとおりBOMなしで保存しましたらあっさり解決しました。
    ありがとうございます。
  • id:take0978
    私はjoomla!のインストールで同じような症状が出ていたのですが、
    UTF-8をBOMなしにしただけで見事解決しました。
    ありがとうございました。
  • id:sasaki004
    同じようなケースのエラーが出て困ってたんですけど、解決したんでコメントします。
    BOMなしで保存しても上手くいかないんで苦戦してましたが、
    header("Location: home.php");
    のLocation:とhome.phpの間にある半角スペースを除いたら解決しました。
    ご参考までに。

この質問への反応(ブックマークコメント)

トラックバック

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません