0

可能重复:
PHP 中的“警告:标头已发送”

我有一个 php 页面,当我填写提交的电子邮件并按 Enter 时,它在发送邮件后连接到此页面中的 mail.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 中,响应分为两部分:标头和正文。它们由双换行符分隔。

通过<html><body>在 mail.php 脚本的顶部打印,您有效地告诉 PHP 您已完成标题并准备好输出。由于 PHP 将信息发回给 Apache,它已经发回了完整的标头集(它需要,因为您现在已经开始发送实际的响应正文)。

你有两个选择:

  • 在您的 PHP 安装中启用输出缓冲(然后 PHP 将缓冲响应正文,直到脚本执行结束或直到您显式调用其中一种ob*end()方法。
  • 更改您的页面以发送电子邮件,然后在将任何输出打印到浏览器之前重定向。
于 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 回答