重定向时出错

时间:2012-12-07 21:00:32

标签: php redirect

  

可能重复:
  “Warning: Headers already sent” in PHP

我有一个php页面,当我填写电子邮件归档并按回车键连接到mail.php 在发送邮件后的这个页面中,我想回到我所在的页面,但它给了我这个错误:

警告:无法修改标题信息 - 已经发送的标题(/home/mysite/public_html/users/teachers/mail.php:3上的输出)/home/mysite/public_html/users/teachers/mail.php在第15行

这是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>

我该怎么办?

3 个答案:

答案 0 :(得分:2)

在HTTP中,响应分为两部分:标题和正文。他们被双线分开。

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

您有两种选择:

  • 在PHP安装中启用输出缓冲(PHP将缓冲响应主体,直到脚本执行结束或直到您明确调用其中一个ob*end()方法。
  • 更改您的页面以发送电子邮件,然后在将任何输出打印到浏览器之前重定向。

答案 1 :(得分: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');

?>

答案 2 :(得分:0)

您的代码中有一些内容会将某些内容写入输出缓冲区。必须在将任何输出写入输出缓冲区之前完成重定向。

这不起作用:

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

这将有效:

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