繁体   English   中英

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

[英]Seeing “Cannot modify header information” error when attempting to redirect

我有一个基本的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()但我不知道这是否有必要...

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

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

因此,要避免发送HTTP标头,您需要在调用header之前避免任何输出,或者需要对它进行缓冲以使它不会被发送(请参见输出控件 ,尤其是ob_start )。

引起发送所述HTTP标头,其中所述输出发生的位置是在错误消息(“输出开始的文件线 ”)。

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

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

应该工作正常。 只要确保您在此之前没有其他事情发生即可。 换句话说,没有<body><title><head>或代码上方的任何内容。

如果您出于某种原因想要这样做,请确保您的php代码仍然高于一切。

示例:

<?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> 

您好,更好的选择是您可以使用javascript window.location返回页面,例如echo'window.location =“ / reservations /?res = $ res&id = $ id”'

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM