在PHP服务器代码中调用邮件然后返回HTML页面。 写了以下服务器代码:
<!DOCTYPE HTML>
<HEAD>
<META HTTP-EQUIV="PRAGMA" CONTENT="NO-CACHE">
</HEAD>
<BODY>
<?php
$referer = filter_input(INPUT_SERVER, 'HTTP_REFERER'); // real referrer detected
// do something or nothing
header("Location: $referer");
?>
</BODY>
此代码产生错误“警告:无法修改标头信息 - 标头已由...发送”。 为什么呢?
答案 0 :(得分:1)
您的PHP代码位于HTML的中间,被视为输出。生成输出后,header()
等函数将不再起作用,并将返回错误。解决方案是在任何html之前将php代码移动到文件的顶部。
<?php
$referer = filter_input(INPUT_SERVER, 'HTTP_REFERER'); // real referrer detected
// do something or nothing
header("Location: $referer");
?>
<!DOCTYPE HTML>
<HEAD>
<META HTTP-EQUIV="PRAGMA" CONTENT="NO-CACHE">
</HEAD>
<BODY>
</BODY>
答案 1 :(得分:1)
header()
必须在发送任何实际输出之前调用,
您已经在使用之前发送了数据。
☼►解决方案:来操纵它并且能够在任何你想要的地方使用header()..
然后PHP有输出控制功能,它允许你控制输出的时间(在发送它之前,服务器中正在缓冲(例如HTML代码)。请按照下面的说明进行操作:
在开头使用ob_start
,在最后使用ob_end
✔用以下代码替换你的代码:
<?php
ob_start( );
?>
<!DOCTYPE HTML>
<HEAD>
<META HTTP-EQUIV="PRAGMA" CONTENT="NO-CACHE">
</HEAD>
<BODY>
<?php
$referer = filter_input(INPUT_SERVER, 'HTTP_REFERER'); // real referrer detected
// do something or nothing
header("Location: $referer");
?>
</BODY>
<?php
ob_end_flush( );
?>
☢警告:确保
<?php ob_start( );
之前没有空格,否则会抛出相同的错误。
.........................................
<登记/> ✘ - 错误 方式:<?php ob_start( ); ?>
✔ - 正确 方式:
<?php ob_start( ); ?>