我有一个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>
我该怎么办?
答案 0 :(得分:2)
在HTTP中,响应分为两部分:标题和正文。他们被双线分开。
通过在mail.php脚本的顶部打印<html><body>
,您已经有效地告诉PHP您已完成标题并准备输出。当PHP将信息发送回Apache时,它已经发送回完整的标头集(它需要,因为你现在已经开始发送实际的响应体)。
您有两种选择:
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');