0

重複の可能性:
PHP の「警告: ヘッダーは既に送信されています」

メールを入力してEnterキーを押すと、メールを送信した後、このページのmail.phpに接続するphpページがありますが、元のページに戻りたいのですが、次のエラーが表示されます。

警告: ヘッダー情報を変更できません - 15 行目の /home/mysite/public_html/users/teachers/mail.php で既に送信されたヘッダー (/home/mysite/public_html/users/teachers/mail.php:3 で開始された出力)

これは mail.php コードです:

<html>
<body>

<?php

$email = $_GET['email'] ;

$subject =$_GET['author'] ;

$message = $_GET['text'] ;

$to = "mail@mail.com";

$from = $email;

$headers = "From:" . $from;

mail($to,$subject,$message,$headers,$from);

?> 

    <script language="javascript">


alert('your mail has sent !');</script>

<?php

header('location:../teachers/index.php');

?>

</body>

</html>

私は何をすべきか ?

4

3 に答える 3

2

HTTPでは、応答はヘッダーと本文の2つのセクションに分割されます。それらは二重改行で区切られています。

<html><body>mail.phpスクリプトの先頭に印刷することで、ヘッダーが完成し、出力の準備ができたことをPHPに効果的に伝えることができます。PHPは情報をApacheに返送しているため、完全なヘッダーセットがすでに返送されています(実際の応答本文の送信を開始したため、返送する必要があります)。

2つのオプションがあります。

  • PHPインストールで出力バッファリングを有効にします(PHPは、スクリプトの実行が終了するまで、またはob*end()メソッドの1つを明示的に呼び出すまで、応答本文をバッファリングします。
  • ページを変更して電子メールを送信し、ブラウザに出力を印刷する前にリダイレクトします。
于 2012-12-07T21:04:32.623 に答える
1

リダイレクトが予想されるページでは、何も送信しないでください。

コードは次のようになります

<?php

$email = $_GET['email'] ;

$subject =$_GET['author'] ;

$message = $_GET['text'] ;

$to = "mail@mail.com";

$from = $email;

$headers = "From:" . $from;

mail($to,$subject,$message,$headers,$from);

header('location:../teachers/index.php');

?>
于 2012-12-07T21:04:00.740 に答える
0

出力バッファに何かを書き込むコードが含まれています。リダイレクトは、出力が出力バッファーに書き込まれる前に実行する必要があります。

これはうまくいきません:

<?php
echo 'bla';
header('Location: index.php');

これはうまくいきます:

<?php
header('Location: index.php');
于 2012-12-07T21:03:15.670 に答える