尝试重定向时看到“无法修改标头信息”错误

时间:2010-12-16 09:32:22

标签: php email header

我有一个基本的PHP mail()脚本,通过电子邮件向用户发送他们刚刚提交的表单的详细信息。 PHP将所有数据精确地插入到数据库中,但是当我想在数据处理完毕后重定向它们时会出现问题。

我目前正在使用:

mail($email, $subject, $message, $headers);

header('Location: '/reservations/?res='.$res.'&id='.$id.'');

但它正在抛出这个错误:

Warning: Cannot modify header information - headers already sent

我意识到您无法发送多个标头,但有没有办法区分邮件和位置标头?我不想使用JavaScript重定向,因为它太慢而且滞后。我读过有关ob_start()的某处,但我不知道是否有必要......

5 个答案:

答案 0 :(得分:4)

mail()不会生成任何输出。在打开<?php标记之前,您可能在文件顶部有一些空格。

答案 1 :(得分:3)

使用header修改HTTP标头要求尚未发送。当第一次输出发生时就会发生这种情况。

因此,为了避免发送HTTP标头,您需要在调用header之前避免任何输出,或者您需要缓冲它以使其不被发送(请参阅output control,尤其是{{3 }})。

导致发送HTTP标头的输出位置出现在错误消息中(“ file >

答案 2 :(得分:0)

在邮件功能之前添加“@”符号,它将解决您的问题。

即。,

@mail($email, $subject, $message, $headers);
header('Location: /reservations/?res='.$res.'&id='.$id);

答案 3 :(得分:0)

<?php
mail($email, $subject, $message, $headers);
header('Location: '/reservations/?res='.$res.'&id='.$id.'');
?>

应该工作得很好。请确保在此之前没有其他任何事情发生。换句话说,没有<body><title><head>或代码之上的任何内容。

如果您出于某种原因希望确保您的PHP代码仍然是最重要的。

Exampel:

<?php
mail($email, $subject, $message, $headers);
header('Location: '/reservations/?res='.$res.'&id='.$id.'');
?>
<!DOCTYPE HTML>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Send mail</title>
</head>

<body>
</body>
</html> 

答案 4 :(得分:0)

更好的选择是你可以使用javascript window.location返回页面 喜欢 echo'window.location =“/ reservations /?res = $ res&amp; id = $ id”'